Kotlin:内部范围 - This

Kotlin: Inner scope - This

我刚刚使用了 Kotlins 自动重构,它基本上给我留下了这个:

coverView.viewTreeObserver.addOnPreDrawListener {
    coverView.viewTreeObserver.removeOnPreDrawListener(this)
    true
}

这是行不通的。 IntelliJ 向我显示 this 指的是外部 class 但不是 OnPreDrawListener。这是为什么? kotlin 文档说这总是指最内层的范围。

要修复您的代码,您可以在此处使用 object expression 而不是 lambda

coverView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
    override fun onPreDraw(): Boolean {
        coverView.viewTreeObserver.removeOnPreDrawListener(this)
        return true
    }
})

this 函数表达式中的表达式(以及传递给 addOnPreDrawListener 方法的 lambda 函数表达式)允许您访问 lambda 的闭包,即在其最外层范围内声明的变量,而不是 lambda 本身。