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

Nic*_*las 8 kotlin kotlin-lateinit

成员 lateinit 变量初始化可以通过以下方式检查:

class MyClass {
    lateinit var foo: Any
    ...
    fun doSomething() {
        if (::foo.isInitialized) {
           // Use foo
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此语法不适用于本地 lateinit 变量。Lint 报告错误:“尚不支持对变量的引用”。从逻辑上讲,应该有一种方法可以做到这一点,因为 lateinit 变量在未初始化时在内部为 null。

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

nPn*_*nPn 13

您在问题中显示的代码在 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 
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

因此,目前似乎不支持此功能。唯一能想到使用 lateinit local 的地方是如果 local 是在 lambda 中捕获的变量?