Sobes.tech
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).