我有点kotlin newbie,我正在尝试删除回调本身内的回调实例。
我要实现的目标类似于以下代码。
private val myCallback = SomeInterfaceType {
if(it.something) {
someObject.removeListener(this@SomeInterfaceType)
}
}
当然不会编译,否则我不会在这里问。所以我问,如何从接口的实例内删除回调?
编辑:错误是"推断的类型为x,但预期y。
编辑2:我刚刚意识到我已经问了一个错误的问题,它与之相似,但不完全是接口。
我正在使用的对象具有以下构造函数/接口
public open class Watcher<T> public constructor(call: (T) -> kotlin.Unit)
因此,实际上我正在尝试从call: (T) -> kotlin.Unit
内部引用观察者以删除侦听器。
可能吗?
您需要使用完整的对象表达式语法来参考实例本身:
private val myCallback = object: SomeInterfaceType() {
override fun onSomeEvent() {
if (it.something) {
someObject.removeListener(this)
}
}
}
也有一个解决方法:将对myCallback
的引用包装到调用它的函数中(例如run { ... }
(:
private val myCallback: SomeInterfaceType = SomeInterfaceType {
if (it.something) {
someObject.removeListener(run { myCallback })
}
}