我刚刚使用了Kotlins自动重构器,它基本上给我留下了这个:
coverView.viewTreeObserver.addOnPreDrawListener {
coverView.viewTreeObserver.removeOnPreDrawListener(this)
true
}
哪个不起作用。 IntelliJ向我展示this
引用外部类但不引用OnPreDrawListener。这是为什么? kotlin文档说这总是指最内部的范围。
答案 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本身。