lateinit
プロパティが初期化されているかどうかを確認しようとしています。
Kotlin 1.2では、そのためにisInitialized
メソッドが用意されました。それはlateinitプロパティが宣言されているクラスでそれを行うときに機能します。 しかし、私は別のクラスからこれを呼び出すしようとすると、私は次の警告を得る:のisInitialized - この時点でlateinit varのバッキングフィールドにアクセスできない
バッキングフィールド「lateinitするvar FOO:バー」は、この時点ではアクセスできません
を私のモデルクラス(レッツ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
}
}
}
この作業を取得するために、任意のチャンス?
私の現在の回避策は、person
プロパティからisInitialized
を返すTest1でメソッドを作成することです。
fun isPersonInitialized(): Boolean = ::person.isInitialized
//in Test2:
if (test1.isPersonInitialized()) {
// Works
}
私は答えを知りません。しかし、なぜあなたはnullableの上で 'isInitialized'を使うのですか? 'lateinit'はオブジェクトが使用される前に常に初期化されます。 – Joshua
@Elegyあなたのコードはコンパイルされません。 if式をクラス本体に直接置くことはできません。私はあなたがinitブロックの中にそれをラップするのを忘れたと思う。私は知っている、これはあなたの最初の問題を解決しません。 –
@Joshua人がまだ初期化されていないケースが1つあります。 – ElegyD