Middle
Kas yra 'lazy' ir 'lateinit' Kotlin?
sobes.tech AI
Atsakymas iš AI
lazy - tai savybės delegatas vėlavimui ir nekeičiamiems (tik skaitymui) savybėms (val). Vertė apskaičiuojama pirmą kartą kreipiantis į savybę ir tada saugoma.
// Lazy naudojimo pavyzdys
val lazyValue: String by lazy {
println("Inicijavimas") // bus išvestas tik kartą pirmo kreipimosi metu
"Labas, lazy!"
}
lateinit - modifikatorius keičiamoms (mutable) savybėms (var), leidžiantis atidėti inicijavimą iki pirmojo prieigos momento. Savybė turi būti ne-nullable. Naudojant savybę prieš inicijuojant, gaunama UninitializedPropertyAccessException.
// lateinit naudojimo pavyzdys
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Labas, lateinit!"
}
fun useVariable() {
// Inicijavimo patikrinimas prieš naudojimą (pasirinktinai, bet rekomenduojama)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("Kintamasis dar nėra inicijuotas")
}
}
Pagrindiniai skirtumai:
| Savybė | lazy |
lateinit |
|---|---|---|
| Savybės tipas | val (tik skaityti) |
var (keičiamas) |
| Nulinės reikšmės galimybė | Gali būti nullable arba non-nullable | Turi būti non-nullable |
| Inicijavimas | Automatinis, pirmo kreipimosi metu | Rankinis |
| Vėlavimas | Taip, apskaičiuojama pirmo kreipimosi metu | Taip, be inicijavimo pradžioje |
| Srauto saugumas | Paprastai, sinchronizacija, yra galimybės | Ne garantuojama, priklauso nuo konteksto |
| Klaida prie prieigos iki inicijavimo | Ne, automatiškai inicijuojama | UninitializedPropertyAccessException |