Sobes.tech
Middle

Mis on 'lazy' ja 'lateinit' Kotlinis?

sobes.tech AI

Vastus AI-lt

lazy - see on omaduse delegeerija viivitusega ja muutumatute (ainult lugemiseks) omaduste (val) jaoks. Väärtus arvutatakse esimesel pääsul omadusele ja seejärel salvestatakse vahemällu.

//  Lazy kasutamise näide
val lazyValue: String by lazy {
    println("Initsialiseerimine") // kuvatakse ainult üks kord esimesel pääsul
    "Tere, lazy!"
}

lateinit - muudetavate (mutable) omaduste (var) modifikaator, mis võimaldab edasi lükata initsialiseerimist kuni esimese pääsuni. Omadus peab olema mitte-nullable. Omaduse kasutamine enne initsialiseerimist põhjustab UninitializedPropertyAccessException-i.

//  lateinit kasutamise näide
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "Tere, lateinit!"
}

fun useVariable() {
    //  Initsialiseerimise kontroll enne kasutamist (valikuline, kuid soovitatav)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Muuttuja pole veel initsialiseeritud")
    }
}

Peamised erinevused:

Omadus lazy lateinit
Omaduse tüüp val (ainult lugemiseks) var (muudetav)
Null väärtusvõimalus Võib olla nullable või non-nullable Peab olema non-nullable
Initsialiseerimine Automaatne, esimese pääsuga Käsitsi
Viivitamine Jah, arvutatakse esimese pääsuga Jah, ilma initsialiseerimiseta
Jooksuturvalisus Tavaliselt, sünkroniseeritud, on valikud Ei garanteerita, sõltub kontekstist
Viga enne initsialiseerimist Ei, initsialiseerub automaatselt UninitializedPropertyAccessException