删除kotlin中的“this”回调

时间:2018-02-12 11:21:34

标签: android kotlin

我有点kotlin新手,我正在尝试删除回调本身内部的回调实例。

我正在努力实现的目标类似于以下代码。

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内部引用Watcher来删除监听器。

这可能吗?

2 个答案:

答案 0 :(得分:8)

您需要使用完整的object expression语法来引用能够引用实例本身:

private val myCallback = object: SomeInterfaceType() {
    override fun onSomeEvent() {
        if (it.something) {
            someObject.removeListener(this)
        }
    }
}

答案 1 :(得分:2)

还有一个解决方法:将对myCallback的引用包装到传递给调用它的函数的lambda中(例如run { ... }):

private val myCallback: SomeInterfaceType = SomeInterfaceType {
   if (it.something) {
        someObject.removeListener(run { myCallback })
   }
}