Sobes.tech
Junior

Vysvetlite, ako funguje vlastnosť 'lateinit' v Kotlin.

sobes.tech AI

Odpoveď od AI

lateinit sa koristi za deklaráciu ne-nullovateľných vlastností, ktoré budú neskôr inicializované pred prvým použitím.

  • Platí len pre meniteľné vlastnosti (var).
  • Nemôže sa použiť s primitívnymi dátovými typmi (ako Int, Boolean, Float), pretože tieto nemôžu byť null.
  • Kompilátor nevyžaduje okamžitú inicializáciu vlastnosti pri jej deklarácii.
  • Ak sa vlastnosť použije pred inicializáciou, bude vyhodená výnimka UninitializedPropertyAccessException.

Príklad:

class MyClass {
    lateinit var myProperty: String // Vlastnosť bude neskôr inicializovaná

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

    fun useProperty() {
        println(myProperty) // Bezpečné po inicializácii
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Tu bude vyhodená `UninitializedPropertyAccessException`
    obj.initializeProperty("Hello")
    obj.useProperty() // Vypíše "Hello"

    // Kontrola, či je vlastnosť inicializovaná
    if (obj::myProperty.isInitialized) {
        println("Vlastnosť je inicializovaná")
    }
}

Je možné skontrolovať, či vlastnosť lateinit bola inicializovaná pomocou reflexie: ::propertyName.isInitialized.

Použitie lateinit je bežné v frameworkoch, kde sú vlastnosti injektované (dependency injection) po vytvorení objektu (napríklad v Android s UI prvkami alebo injektovaním závislostí).