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 |