请解释每种方法的用例和优缺点。
发布于 2018-05-29 05:44:55
备选案文1
使用选项1,您无法将其称为传递lambda。例如,这不编译:
doSomethingWithCallback1 { print("helloWorld") }有趣的是,如果在Java中定义了相同的方法:
void doSomethingWithJavaCallback(JavaCallback callback) {
// Do something
callback.call();
}然后,您可以使用Kotlin的lambda来调用它。这是因为Kotlin只对Java中定义的函数进行SAM转换。
选项2
相反,如果使用选项2,则可以使用lambda调用它。当从Kotlin和Java调用它时,它都能工作。
选项3
正如注释中提到的,第三个选项使用的类型别名如下所示:
typealias Callback = () -> Unit
fun doSomethingWithCallback5(callback: Callback) {
// Do something
callback()
}您可以在函数签名中保留类型,和在调用站点上使用lambda。
发布于 2018-05-30 02:29:15
var doSomething: ((Any) -> Unit)? = null并调用回调:
doSomething?.invoke(any)最后,与侦听器一样:
youClass.doSomething = { any ->
// this is callback
}https://stackoverflow.com/questions/50529198
复制相似问题