I'm trying to check if a lateinit
property has been initialized.
In Kotlin 1.2 we now have the isInitialized
method for that. It works when I do that in the class where the lateinit property is declared.
But when I try to call this from another class I get the following warning:
Backing field of 'lateinit var foo: Bar' is not accessible at this point
My model class (let's say Person
) is written in Java
Two other classes (let's say Test1
and Test2
) are written in Kotlin
Example:
class Test1 {
lateinit var person: Person
fun method() {
if (::person.isInitialized) {
// This works
}
}
}
-
class Test2 {
lateinit var test1: Test1
fun method() {
if (test1::person.isInitialized) {
// Error
}
}
}
Any chance to get this working?
My current workaround is to make a method in Test1 which returns isInitialized
from the person
property.
fun isPersonInitialized(): Boolean = ::person.isInitialized
//in Test2:
if (test1.isPersonInitialized()) {
// Works
}
A really simple workaround to the constraints described by the accepted answer is the following:
You can check if a
lateinit
property has been initialized by catching theUninitializedPropertyAccessException
like so:According to the docs:
Which is why you cannot check that in the main function.