isInitialized – lateinit var的备份字段在此处不可访问
我试图检查一个lateinit
属性是否已经初始化。
在Kotlin 1.2中,我们现在有了isInitialized
方法。 当我在声明了lateinit属性的类中这样做的时候,它就起作用了。 但是,当我尝试从另一个class级调用这个时,我收到以下警告:
此处不能访问’lateinit var foo:Bar’的备份字段
我的模型类(比方说Person
)是用Java编写的
另外两个类(比如说Test1
和Test2
)是用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 }