Sobes.tech
Junior

Explicați cum funcționează proprietatea 'lateinit' în Kotlin.

sobes.tech AI

Răspuns de la AI

lateinit este utilizat pentru a declara proprietăți non-nullable care vor fi inițializate mai târziu, înainte de prima utilizare.

  • Se aplică doar proprietăților modificabile (var).
  • Nu poate fi utilizat cu tipuri de date primitive (cum ar fi Int, Boolean, Float), deoarece acestea nu pot fi null.
  • Compilatorul nu necesită o inițializare imediată a proprietății la declarare.
  • Dacă proprietatea este utilizată înainte de inițializare, va fi aruncată o excepție UninitializedPropertyAccessException.

Exemplu:

class MyClass {
    lateinit var myProperty: String // Proprietatea va fi inițializată mai târziu

    fun initializeProperty(value: String) {
        myProperty = value
    }

    fun useProperty() {
        println(myProperty) // Sigur după inițializare
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Aici va fi aruncată o `UninitializedPropertyAccessException`
    obj.initializeProperty("Hello")
    obj.useProperty() // Va afișa "Hello"

    // Verificare dacă a fost inițializată
    if (obj::myProperty.isInitialized) {
        println("Proprietatea a fost inițializată")
    }
}

Se poate verifica dacă o proprietate lateinit a fost inițializată folosind reflecția: ::propertyName.isInitialized.

Utilizarea lateinit este frecventă în framework-uri unde proprietățile sunt injectate (dependency injection) după crearea obiectului (de exemplu, în Android cu elemente UI sau injecție de dependențe).