isInitialized – lateinit var的备份字段在此处不可访问

我试图检查一个lateinit属性是否已经初始化。
在Kotlin 1.2中,我们现在有了isInitialized方法。 当我在声明了lateinit属性的类中这样做的时候,它就起作用了。 但是,当我尝试从另一个class级调用这个时,我收到以下警告:

此处不能访问’lateinit var foo:Bar’的备份字段

我的模型类(比方说Person )是用Java编写的
另外两个类(比如说Test1Test2 )是用Kotlin编写的

例:

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

有机会得到这个工作?

我目前的解决方法是在Test1中创建一个从person属性返回isInitialized的方法。

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

您可以通过捕获lateinit来检查是否已经初始化lateinit属性,如下所示:

 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) { Test() // ups ups }