【发布时间】:2019-12-07 20:36:56
【问题描述】:
我看过类似的问答,但没有找到我要找的东西 - 也许我遗漏了一些东西。
我想(在 Kotlin 类中)实现一个监听器属性。监听器只有一个方法,所以它对 lambda 友好。
interface Listener {
fun onDone(id: String)
}
...
class Manager {
var listener: Listener? = null
}
当我想从 Java (8) 代码中设置这个属性时,我可以使用 lambda 干净地完成它:
manager.setListener(id -> {
});
但是,在 Kotlin 中,我必须使用方法创建一个匿名对象:
manager.listener = object : OfflineManager.Listener {
override fun onDone(id: String) {
}
}
另一个选项,在 Kotlin 中使用函数引用:
var listener: ((String) -> Unit)? = null
在 Kotlin 中允许使用不错的 lambda,但 Java lambda 需要一个返回值(即使该函数被定义为返回 Unit),这对 Java 开发人员来说很陌生。
那么我怎样才能兼顾两者呢?
【问题讨论】: