检查本地 lateinit 变量是否已初始化

Check if a local lateinit variable is initialized

可以检查成员 lateinit 变量初始化:

class MyClass {
    lateinit var foo: Any
    ...
    fun doSomething() {
        if (::foo.isInitialized) {
           // Use foo
        }
    }
}

但是,此语法不适用于本地 lateinit 变量。 Lint 报告错误:"References to variables aren't supported yet"。逻辑上应该有一种方法可以做到这一点,因为 lateinit 变量在未初始化时在内部为空。

有没有办法检查局部变量是否被初始化?

您在问题中显示的代码在 Kotlin 1.2 及更高版本中实际上没问题,因为 foo 是实例变量,不是局部变量。 您在 Alexey 的评论 (Unsupported [References to variables aren't supported yet]) 中报告和提到的错误消息可以由真正的局部变量触发,例如在下面的 doSomethingElse 方法中。

class MyClass {
    lateinit var foo: Any

    fun doSomething() {
        if (::foo.isInitialized) {  // this is fine to use in Kotlin 1.2+
           // Use foo
        }
    }
    fun doSomethingElse() {
        lateinit var bar: Any

        if (::bar.isInitialized) {  // this is currently unsupported (see link in Alexey's comment.
            // Use bar 
        }

    }

}

看来这目前不受支持。唯一会想到使用 lateinit local 的地方是如果 local 是在 lambda 中捕获的变量?