请说明一个用例以及每种方法的利弊。
使用界面。
fun doSomethingWithCallback(callback: Callback) {
// Do something
callback.call()
}
使用高阶函数。
fun doSomethingWithCallback(callback: () -> Unit) {
// Do something
callback()
}
使用选项1时,您将无法通过lambda调用它。例如,这不能编译:
doSomethingWithCallback1 { print("helloWorld") }
有趣的是,如果在Java中定义了相同的方法:
void doSomethingWithJavaCallback(JavaCallback callback) {
// Do something
callback.call();
}
然后,您可以使用Kotlin的lambda进行调用。这是因为Kotlin仅对Java中定义的函数执行SAM转换。
相反,如果使用选项2,则可以使用lambda进行调用。从Kotlin和Java调用时,它都可以工作。
如评论中所述,第三个选项使用类似这样的类型别名:
typealias Callback = () -> Unit
fun doSomethingWithCallback5(callback: Callback) {
// Do something
callback()
}
您可以将类型保留在函数签名中,并在调用站点上使用lambda。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句