Kotlin中接口的Lambda实现

yi0zb3m4  于 2023-11-21  发布在  Kotlin
关注(0)|答案(5)|浏览(124)

在Kotlin中的代码的等价物是什么,我尝试的似乎没有什么工作:

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

字符串
初始化:

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

u4vypkhs

u4vypkhs1#

如果AnInterface是Java,它可以与SAM conversion一起工作:

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

字符串
否则,如果接口是Kotlin:

  • 从Kotlin1.4开始,可以编写函数接口
fun interface AnInterface {
     fun doSmth(inst: MyClass, num: Int)
}
val impl = AnInterface { inst, num -> ... }

  • 否则,如果接口不起作用,
interface AnInterface {
     fun doSmth(inst: MyClass, num: Int)
}


你可以使用object语法来匿名实现它:

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

e4eetjau

e4eetjau2#

如果你要将接口及其实现重写为Kotlin,那么你应该删除接口并使用函数类型:

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

字符串

abithluo

abithluo3#

您可以使用object expression
所以它看起来像这样:

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

字符串

cidc1ykv

cidc1ykv4#

对于任何在2022年阅读这篇文章的人来说,Kotlin现在有了函数式(SAM)接口。请参阅https://kotlinlang.org/docs/fun-interfaces.html
也许它会保存别人一些时间取决于您的用例。

svujldwt

svujldwt5#

你也可以这样做,使用@lambda标签

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

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

字符串

相关问题