我正在尝试检查 lateinit
属性是否已初始化。
在 Kotlin 1.2 中,我们现在有了 isInitialized
方法。当我在声明了 lateinit 属性的类中这样做时,它会起作用。
但是当我尝试从另一个类调用它时,我收到以下警告:
Backing field of 'lateinit var foo: Bar' is not accessible at this point
我的模型类(比如 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
}
最佳答案
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
}
}
关于java - isInitialized - lateinit var 的支持字段此时不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47549015/