lateinitVar cannot be resolved to use isInitialized from Kotlin 1.2.10

ligi picture ligi · Dec 18, 2017 · Viewed 8.9k times · Source

I want to use this feature

the simplest thing like in the example does not work for me:

lateinit val foo = 1
val bar = foo::lateinitVar.isInitialized()

But I am getting

unresolved reference lateinitVar

I am using Kotlin 1.2.10 via gradle in Android-Studio (also the Kotlin 1.2.10 plugin installed there)

Answer

s1m0nw1 picture s1m0nw1 · Dec 18, 2017

There’s no variable with name lateinitVar in your code, thus the error. Look at the example again:

this::lateinitVar.isInitialized

There’s a variable lateinitVar defined in this, which the function is called on. The code snippet in the example can be expanded (little plus sign at the beginning of the listing) and looks as follows:

class Foo {
    lateinit var lateinitVar: String

    fun initializationLogic() {
        println("isInitialized before assignment: " + this::lateinitVar.isInitialized)
        lateinitVar = "value"
        println("isInitialized after assignment: " + this::lateinitVar.isInitialized)    

    }
}

This might make it more clear.

Also, be aware that lateinit can’t be applied to val but only var.