我试图检查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中创建一个从isInitialized
属性返回person
的方法。
fun isPersonInitialized(): Boolean = ::person.isInitialized
//in Test2:
if (test1.isPersonInitialized()) {
// Works
}
答案 0 :(得分:20)
针对accepted answer描述的约束的一种非常简单的解决方法如下:
class LateClass {
lateinit var thing: Thing
fun isThingInitialized() = ::thing.isInitialized
}
class Client {
val lateClass = LateClass()
... things happen ...
if (lateClass.isThingInitialized() {
// do stuff with lateClass.thing, safely
}
}
答案 1 :(得分:5)
答案 2 :(得分:1)
我的版本是Kotlin财产。
class LateClass {
lateinit var thing: Thing
val isThingInitialized get() = this::thing.isInitialized
}