kotlin

时间:2018-01-16 15:44:58

标签: java methods lambda interface kotlin

kotlin中的代码相当于什么,我尝试的似乎没有任何效果:

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

INIT:

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

4 个答案:

答案 0 :(得分:14)

如果AnInterface是Java,则可以使用SAM conversion

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) {
        //...
    }
}

答案 1 :(得分:12)

如果您将接口及其实现重写为Kotlin,那么您应该删除接口并使用功能类型:

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

答案 2 :(得分:2)

您可以使用object expression

所以它看起来像这样:

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

答案 3 :(得分:0)

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


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

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