首页 > 解决方案 > 如何在 Kotlin 的“运行”或“应用”中引用实现回调

问题描述

如何在“运行”或“应用”中有实现参考

class MyClass : MyCallback {

    ...
    fun myMethod() {
        val myObject = MyObject()
        myObject.run {
            setCallback(this) // <-- How to have the MyCallback's reference here?
        }
    }

    override fun onMyCallback() {
        // Do something
    }
}

标签: androidkotlin

解决方案


As是一个函数,它在给定的块中run使用带有接收器(kotlin 参考run this)的 lambda 来引用接收器,这在您的示例myObject中。

因此,您需要使用限定的 this -expression 来引用封闭的MyClass-instance。如评论中所述,您需要像这样更改代码:

class MyClass : MyCallback {

    ...
    fun myMethod() {
        val myObject = MyObject()
        myObject.run {
            setCallback(this@MyClass) // <-- qualified this
        }
    }

    override fun onMyCallback() {
        // Do something
    }
}

如果要避免使用标签,则必须替换该run功能。一种可能的替代方法是also,而不是使用带有接收器的 lambda,而是将对象作为参数:

class MyClass : MyCallback {

    ...
    fun myMethod() {
        val myObject = MyObject()
        myObject.also { obj ->
            //lambda without receiver, this refers to the enclosing instance of MyClass
            setCallback(this)
        }
    }

    override fun onMyCallback() {
        // Do something
    }
}

推荐阅读