Kotlin:在 Timertask 处理程序中丢失 'this' 上下文
Kotlin: lost of 'this' context in a Timertask Handler
我有这个代码示例,我用它来测试我的项目中的灯,是用 Kotlin 编写的。
fun Light.test() {
val open = this.isOpen()
this.setOpen(!open)
val that = this
Timer().schedule(500) {
that.setOpen(open)
}
}
看,使用 Timer().schedule(500)
,在 lambda 中,我似乎失去了 this
的范围,并且 this
变成了 timertask
本身,而不是 timertask
Light
对象。
我使用从 2010 年 Javascript 学到的老式 val that = this
找到了一个解决方案,但我想知道在 Kotlin 中是否有更优雅的方法来做到这一点。
感谢您的帮助
有特殊语法,您可以在任何上下文中访问首选 this。在您的情况下,您可以使用:
fun Light.test() {
val open = isOpen()
setOpen(!open)
Timer().schedule(500) {
this@test.setOpen(open)
}
}
我有这个代码示例,我用它来测试我的项目中的灯,是用 Kotlin 编写的。
fun Light.test() {
val open = this.isOpen()
this.setOpen(!open)
val that = this
Timer().schedule(500) {
that.setOpen(open)
}
}
看,使用 Timer().schedule(500)
,在 lambda 中,我似乎失去了 this
的范围,并且 this
变成了 timertask
本身,而不是 timertask
Light
对象。
我使用从 2010 年 Javascript 学到的老式 val that = this
找到了一个解决方案,但我想知道在 Kotlin 中是否有更优雅的方法来做到这一点。
感谢您的帮助
有特殊语法,您可以在任何上下文中访问首选 this。在您的情况下,您可以使用:
fun Light.test() {
val open = isOpen()
setOpen(!open)
Timer().schedule(500) {
this@test.setOpen(open)
}
}