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 中捕获的变量?
| 归档时间: |
|
| 查看次数: |
5397 次 |
| 最近记录: |