Junior
Wyjaśnij, jak działa właściwość 'lateinit' w Kotlin.
sobes.tech AI
Odpowiedź od AI
lateinit jest używany do deklarowania właściwości nie-nullowalnych, które będą inicjalizowane później, przed pierwszym użyciem.
- Dotyczy tylko właściwości zmiennych (
var). - Nie może być używany z typami danych prymitywnych (takimi jak
Int,Boolean,Float), ponieważ nie mogą byćnull. - Kompilator nie wymaga natychmiastowej inicjalizacji właściwości przy jej deklaracji.
- Jeśli właściwość zostanie użyta przed inicjalizacją, zostanie wyrzucony wyjątek
UninitializedPropertyAccessException.
Przykład:
class MyClass {
lateinit var myProperty: String // Właściwość będzie zainicjalizowana później
fun initializeProperty(value: String) {
myProperty = value
}
fun useProperty() {
println(myProperty) // Bezpieczne po inicjalizacji
}
}
fun main() {
val obj = MyClass()
// obj.useProperty() // Tu zostanie wyrzucony UninitializedPropertyAccessException
obj.initializeProperty("Hello")
obj.useProperty() // Wyświetli "Hello"
// Sprawdzenie inicjalizacji
if (obj::myProperty.isInitialized) {
println("Właściwość zainicjalizowana")
}
}
Możesz sprawdzić, czy właściwość lateinit została zainicjalizowana, używając refleksji: ::propertyName.isInitialized.
Użycie lateinit jest powszechne w frameworkach, gdzie właściwości są wstrzykiwane (dependency injection) po utworzeniu obiektu (np. w Androidzie z elementami UI lub wstrzykiwaniem zależności).