2017-07-10 17 views
1

ちょうどKotlinを使い始めました。公式のドキュメントを読んでいます。私はkotlinのライブラリからインターフェイスを実装する際に問題があります。ここでJavaインターフェイスの実装 - Kotlin

は、Javaのインターフェイスである:私はkotlinから呼び出しています

public interface ResultCallBack { 
    void detailsRetrieved(Obj var1, AnotherInterface var2); 

    void anotherDataRetrieved(int var1, AnotherInterface var2); 
} 

方法は、このようなものです:私はkotlinからstartLibActivityを呼び出し、同様

ResultCallBackを実装するのですか

public static void startLibActivity(Context context, ResultCallBack callback) { 
     sLuhnCallback = callback; 
     context.startActivity(new Intent(context, Library.class)); 
    } 

私はこの裁判で立ち往生していると思う:

Library.startLibActivity(activity, {})

{}の中で多くの可能性を試しましたが、正しい実装に問題があります。

+0

あなたは何を試しましたか? – talex

+0

あなたのKotlinコードはどのように見えますか? – Makoto

+0

@Makoto最新の質問 –

答えて

4

JavaインターフェイスはSAM Functional Interfaceではないので、ラムダ式{}をKotlinに直接使用することはできません。

あなたは、例えばKotlinで implement a Java interfaceでき

:あなたはまた、その匿名クラスのインスタンスを作成するためにobject expressionを使用することができます

startLibActivity(context, KotlinResultCallBack()) 

:以下のように

class KotlinResultCallBack : ResultCallBack { 
    override fun detailsRetrieved(var1: Obj?, var2: AnotherInterface?) = TODO() 

    override fun anotherDataRetrieved(var1: Int, var2: AnotherInterface?) = TODO() 
} 

次にあなたがstartLibActivityメソッドを呼び出すことができます例えば、Javaインターフェイスを実装します。

startLibActivity(context, object : ResultCallBack { 
    override fun detailsRetrieved(var1: Obj?, var2: AnotherInterface?) = TODO() 

    override fun anotherDataRetrieved(var1: Int, var2: AnotherInterface?) = TODO() 
}) 
+0

を更新しました。これは動作します! 5分で答えを受け入れるでしょう –

+0

@belvi全くありません。 –

関連する問題