删除 kotlin 中的"this"回调



我有点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 })
   }
}

最新更新