Kotlin:内在范围 - 这个

时间:2015-11-25 22:43:11

标签: kotlin

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

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

哪个不起作用。 IntelliJ向我展示this引用外部类但不引用OnPreDrawListener。这是为什么? kotlin文档说这总是指最内部的范围。

1 个答案:

答案 0 :(得分:6)

要修复代码,您可以在此使用object expression代替lambda

coverView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
    override fun onPreDraw(): Boolean {
        coverView.viewTreeObserver.removeOnPreDrawListener(this)
        return true
    }
})
函数表达式中的

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