Próbuję sprawdzić, czy została zainicjowana właściwość lateinit
.
W Kotlin 1.2 mamy teraz metodę isInitialized
. Działa, gdy robię to w klasie, w której zadeklarowana jest właściwość lateinit. Ale gdy próbuję zadzwonić to z innej klasy pojawia się następujące ostrzeżenie:isInitialized - Pole kopii lateinit var jest niedostępne w tym momencie
podkładzie pole „lateinit var foo: bar” nie jest dostępny w tym momencie
mojej klasie modelu (powiedzmy, powiedzmy Person
) jest napisany w Javie
Dwóch innych klas (powiedzmy Test1
i Test2
) są zapisywane w Kotlin
Przykład:
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
}
}
}
jakaś szansa, aby dostać tę pracę?
Moje bieżące obejście polega na wykonaniu metody w Test1, która zwraca isInitialized
z właściwości person
.
fun isPersonInitialized(): Boolean = ::person.isInitialized
//in Test2:
if (test1.isPersonInitialized()) {
// Works
}
ja nie znam odpowiedzi. Ale dlaczego używasz 'isInitialized' ponad nullable? 'lateinit' show zawsze należy zainicjować przed użyciem obiektu. – Joshua
@Eledgy Twój kod się nie kompiluje. nie można umieścić wyrażenia if bezpośrednio w treści klasy. Myślę, że zapomniałeś zapakować go do bloku init. wiem, to nie rozwiązuje twojego podstawowego problemu. –
@Joshua Mam jeden przypadek, w którym nie można jeszcze zainicjować osoby – ElegyD