Код, который вы показываете в своем вопросе, действительно хорош в Kotlin 1.2 и более поздних версиях, так как foo является переменной экземпляра, не локальной переменной.Сообщение об ошибке, о котором вы сообщили и упомянули в комментарии Алексея (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 является переменной, захваченной в лямбду?