web-dev-qa-db-ja.com

KotlinのインターフェースのLambda実装

Kotlinのそのコードと同等のものは何ですか、私が試したものは何も動作しないようです:

public interface AnInterface {
    void doSmth(MyClass inst, int num);
}

その中に:

AnInterface impl = (inst, num) -> {
    //...
}
20
Jocky Doe

AnInterfaceがJavaの場合、 SAM変換 を使用できます。

val impl = AnInterface { inst, num -> 
     //...
}

それ以外の場合、インターフェイスがKotlinの場合...

interface AnInterface {
     fun doSmth(inst: MyClass, num: Int)
}

... object構文を使用して、匿名で実装できます。

val impl = object : AnInterface {
    override fun doSmth(inst:, num: Int) {
        //...
    }
}
18
s1m0nw1

インターフェイスとその実装の両方をKotlinに書き換える場合は、インターフェイスを削除して機能タイプを使用するだけです。

val impl: (MyClass, Int) -> Unit = { inst, num -> ... }
14
Marko Topolnik

オブジェクト式 を使用できます

したがって、次のようになります。

val impl = object : AnInterface {
    override fun(doSmth: Any, num: Int) {
        TODO()
    }
}
2
hudsonb