Middle
Ce sunt 'lazy' și 'lateinit' în Kotlin?
sobes.tech AI
Răspuns de la AI
lazy - delegat de proprietate pentru inițializarea întârziată a proprietăților imutabile (val). Valoarea este calculată la prima accesare a proprietății și apoi cache-ată.
// Exemplu de utilizare lazy
val lazyValue: String by lazy {
println("Inițializare") // va fi afișat o singură dată la prima accesare
"Salut, lazy!"
}
lateinit - modificator pentru proprietăți mutabile (var), care permite amânarea inițializării până la primul acces. Proprietatea trebuie să fie non-null. Utilizarea proprietății înainte de inițializare duce la o UninitializedPropertyAccessException.
// Exemplu de utilizare lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Salut, lateinit!"
}
fun useVariable() {
// Verificare dacă a fost inițializată înainte de utilizare (opțional, dar recomandat)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("Variabila nu a fost încă inițializată")
}
}
Diferențe principale:
| Caracteristică | lazy |
lateinit |
|---|---|---|
| Tipul proprietății | val (doar citire) |
var (mutabil) |
| Nullabilitate | Poate fi nullable sau non-nullable | Trebuie să fie non-nullable |
| Inițializare | Automată, la prima accesare | Manual |
| Întârzierea inițializării | Da, la prima accesare | Da, declarație fără inițializare |
| Siguranța thread-urilor | În mod implicit thread-safe (sincronizare), există opțiuni | Nu garantat, depinde de context |
| Excepție la accesul înainte de inițializare | Nu, se inițializează automat | UninitializedPropertyAccessException |