我刚刚使用了Kotlins自动重构器,它基本上让我这样:
coverView.viewTreeObserver.addOnPreDrawListener {
coverView.viewTreeObserver.removeOnPreDrawListener(this)
true
}
Run Code Online (Sandbox Code Playgroud)
哪个不起作用.IntelliJ向我展示了this引用外部类但不引用OnPreDrawListener.这是为什么?kotlin文档说这总是指最内在的范围.
要修复代码,您可以使用object expression而不是在lambda此处:
coverView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
coverView.viewTreeObserver.removeOnPreDrawListener(this)
return true
}
})
Run Code Online (Sandbox Code Playgroud)
this函数表达式中的表达式(以及传递给addOnPreDrawListener方法的lambda 是函数表达式)允许您访问lambda的闭包,即在其最外层作用域中声明的变量,而不是lambda本身.
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |