Kotlin:内在范围 – 这
我只是使用Kotlins自动重构,它基本上离开了我:
coverView.viewTreeObserver.addOnPreDrawListener { coverView.viewTreeObserver.removeOnPreDrawListener(this) true }
哪个不行 IntelliJ显示我this
是指外部类而不是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本身。