在Kotlin中将接口作为参数传递

map*_*008 23 lambda android interface kotlin

我想传递一个接口作为参数,如下所示:

class Test {
    fun main() {
        test({})
        // how can I pass here?
    }

    fun test(handler: Handler) {
        // do something
    }

    interface Handler {
        fun onCompleted()
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java中,我可以使用匿名函数test(new Handler() { .......... }),但我不能在Kotlin中执行此操作.有人知道怎么做吗?

Tom*_*ura 60

在Kotlin你可以做到:

test(object: Handler {
    override fun onComplete() {

    }
})
Run Code Online (Sandbox Code Playgroud)

或者以同样的方式创建一个属性:

val handler = object: Handler {
    override fun onComplete() {

    }
}
Run Code Online (Sandbox Code Playgroud)

而且,代码中的某个地方:test(handler)

  • 您可以将函数decalre:`fun test(handler :() - > Unit)`(或者除了Unit之外,如果你想返回一些东西) (4认同)
  • 我如何使用 lambda 来实现回调功能(Java)。我想要在不同的类中实现并在不同的类中调用 (2认同)

小智 5

因为你的界面只有一种功能。你可以像这样将其转换为 SAM

fun interface Handler {
        fun onCompleted()
}

Run Code Online (Sandbox Code Playgroud)

那么你可以使用 lambda 来实现这个接口,从而减少总体编写的代码。这仅在 v1.4 中可行