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 本身。
我刚刚使用了 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 本身。