1. ホーム
  2. java

[解決済み] Kotlin: インターフェース ... はコンストラクタを持たない

2022-04-25 06:44:55

質問

私は自分のJavaコードの一部をKotlinに変換していますが、Kotlinコードで定義されているインターフェースをインスタンス化する方法がよく分かりません。例として、私はインターフェイスを持っています(Javaコードで定義されています)。

public interface MyInterface {
    void onLocationMeasured(Location location);
}

そしてさらにKotlinのコードでこのインターフェースをインスタンス化する。

val myObj = new MyInterface { Log.d("...", "...") }

で、問題なく動作します。しかし、MyInterfaceをKotlinに変換してみると。

interface MyInterface {
    fun onLocationMeasured(location: Location)
}

エラーメッセージが表示されるのですが。 Interface MyListener does not have constructors をインスタンス化しようとすると、構文以外は何も変わっていないように見えるのですが。私はKotlinでインターフェイスがどのように機能するかを誤解しているのでしょうか?

どのように解決するのですか?

あなたのJavaコードはSAM変換に依存しています。SAM変換とは、ラムダを単一の抽象メソッドを持つインターフェースに自動的に変換することです。SAM変換は 現在サポートされていません は、Kotlinで定義されたインターフェイスのためのものです。その代わり、そのインターフェースを実装した匿名オブジェクトを定義する必要があります。

val obj = object : MyInterface {
    override fun onLocationMeasured(location: Location) { ... }
}