Ele*_*gyD 32 java kotlin kotlin-lateinit
我正在尝试检查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
}
}
}
Run Code Online (Sandbox Code Playgroud)
-
class Test2 {
lateinit var test1: Test1
fun method() {
if (test1::person.isInitialized) {
// Error
}
}
}
Run Code Online (Sandbox Code Playgroud)
有机会让这个工作吗?
我目前的解决方法是在Test1中创建一个isInitialized
从person
属性返回的方法.
fun isPersonInitialized(): Boolean = ::person.isInitialized
//in Test2:
if (test1.isPersonInitialized()) {
// Works
}
Run Code Online (Sandbox Code Playgroud)
Aut*_*pps 33
接受的答案描述的约束的一个非常简单的解决方法如下:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我的版本作为 Kotlin 属性。
class LateClass {
lateinit var thing: Thing
val isThingInitialized get() = this::thing.isInitialized
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4228 次 |
最近记录: |