Middle
Šta su 'lazy' i 'lateinit' u Kotlinu?
sobes.tech АИ
Одговор од АИ
lazy - delegat svojstva za odloženu i nepromenjivu (val) inicijalizaciju svojstava. Vrednost se računa pri prvom pristupu svojstvu i zatim kešira.
// Primer korišćenja lazy
val lazyValue: String by lazy {
println("Inicijalizacija") // biće prikazano samo jednom pri prvom pristupu
"Zdravo, lazy!"
}
lateinit - modifikator za promenljive (var) svojstva, koji omogućava odlaganje inicijalizacije do prvog pristupa. Svojstvo mora biti non-null. Korišćenje svojstva pre inicijalizacije dovodi do UninitializedPropertyAccessException.
// Primer korišćenja lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Zdravo, lateinit!"
}
fun useVariable() {
// Provera da li je inicijalizovano pre korišćenja (opciono, ali preporučljivo)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("Promenljiva još nije inicijalizovana")
}
}
Glavne razlike:
| Osobina | lazy |
lateinit |
|---|---|---|
| Tip svojstva | val (samo za čitanje) |
var (promenjivo) |
| Nullability | Može biti nullable ili non-nullable | Mora biti non-nullable |
| Inicijalizacija | Automatska, pri prvom pristupu | Rucna |
| Odlaganje inicijalizacije | Da, pri prvom pristupu | Da, deklaracija bez inicijalizacije |
| Bezbednost u više niti | Podrazumevano sigurno (sinhronizacija), postoje opcije | Nije garantovano, zavisi od konteksta |
| Izuzetak pri pristupu pre inicijalizacije | Ne, automatski se inicijalizuje | UninitializedPropertyAccessException |