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)
    }
}