我正在尝试检查 lateinit
属性是否已初始化 .
在Kotlin 1.2中,我们现在有了 isInitialized
方法 . 当我在声明lateinit属性的类中执行此操作时,它可以正常工作 . 但是当我尝试从另一个类调用它时,我得到以下警告:
此时无法访问'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
}
3 回答
根据docs:
这就是为什么你不能在主函数中检查 .
accepted answer描述的约束的一个非常简单的解决方法如下:
您可以通过捕获
UninitializedPropertyAccessException
来检查是否已初始化lateinit
属性: