检查本地 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 中捕获的变量?
可以检查成员 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 中捕获的变量?