isInitialized – El campo de respaldo de var tardinit no está accesible en este punto

Estoy tratando de verificar si una propiedad lateinit ha sido inicializada.
En Kotlin 1.2 ahora tenemos el método isInitialized para eso. Funciona cuando lo hago en la class donde se declara la propiedad lateinit. Pero cuando trato de llamar a esto desde otra class, recibo la siguiente advertencia:

El campo de respaldo de 'lateinit var foo: Bar' no es accesible en este punto

Mi class model (digamos Person ) está escrita en Java
Otras dos classs (digamos Test1 y Test2 ) están escritas en Kotlin

Ejemplo:

 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 } } } 

¿Alguna posibilidad de hacer que esto funcione?

Mi solución actual es hacer un método en Test1 que devuelve isInitialized de la propiedad de la person .

 fun isPersonInitialized(): Boolean = ::person.isInitialized //in Test2: if (test1.isPersonInitialized()) { // Works } 

Puede verificar si una propiedad lateinit se ha inicializado capturando UninitializedPropertyAccessException manera:

 class Person { lateinit var name: String } class Test { lateinit var person1: Person lateinit var person2: Person init { try { println(person1.name) } catch(e: UninitializedPropertyAccessException) { // is thrown because person1 has not been initialized println("ups") } person2 = Person() try { println(person2.name) } catch(e: UninitializedPropertyAccessException) { // is thrown because person2.name has not been initialized println("ups") } } } fun main(args: Array<String>) { Test() // ups ups }