Sobes.tech
Junior

Paaiškinkite, kaip veikia 'lateinit' savybė Kotlin.

sobes.tech AI

Atsakymas iš AI

lateinit naudojamas ne-nullabilioms savybėms deklaruoti, kurios vėliau bus inicializuotos, prieš pirmąjį jų naudojimą.

  • Taikoma tik keičiamoms savybėms (var).
  • Negali būti naudojama su primityviais duomenų tipais (pvz., Int, Boolean, Float), nes jie negali būti null.
  • Kompiliatorius nereikalauja iš karto inicializuoti savybę jos deklaravimo metu.
  • Jei savybė naudojama prieš inicializaciją, bus išmesta išimtis UninitializedPropertyAccessException.

Pavyzdys:

class MyClass {
    lateinit var myProperty: String // Savybė vėliau bus inicializuota

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

    fun useProperty() {
        println(myProperty) // Saugu po inicializacijos
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Čia bus išmesta `UninitializedPropertyAccessException`
    obj.initializeProperty("Hello")
    obj.useProperty() // Išves "Hello"

    // Inicializacijos patikrinimas
    if (obj::myProperty.isInitialized) {
        println("Savybė yra inicializuota")
    }
}

Galite patikrinti, ar lateinit savybė yra inicializuota, naudojant refleksiją: ::propertyName.isInitialized.

lateinit naudojimas dažnai pasitaiko framework'uose, kur savybės injekuojamos (dependency injection) po objekto sukūrimo (pavyzdžiui, Android UI elementuose ar priklausomybių injekcijoje).