Middle
Čo sú 'lazy' a 'lateinit' v Kotlin?
sobes.tech AI
Odpoveď od AI
lazy - delegát vlastnosti pre odloženého a nemenného (val) inicializácie vlastností. Hodnota sa vypočíta pri prvom prístupe k vlastnosti a potom sa cache-uje.
// Príklad použitia lazy
val lazyValue: String by lazy {
println("Inicializácia") // bude zobrazené iba raz pri prvom prístupe
"Ahoj, lazy!"
}
lateinit - modifikátor pre premenné (var) vlastnosti, ktorý umožňuje odložiť inicializáciu do prvého prístupu. Vlastnosť musí byť non-null. Použitie vlastnosti pred inicializáciou spôsobí UninitializedPropertyAccessException.
// Príklad použitia lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Ahoj, lateinit!"
}
fun useVariable() {
// Kontrola, či je inicializovaná pred použitím (voliteľné, ale odporúčané)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("Premenná ešte nie je inicializovaná")
}
}
Hlavné rozdiely:
| Funkcia | lazy |
lateinit |
|---|---|---|
| Typ vlastnosti | val (len na čítanie) |
var (meniteľná) |
| Nullovateľnosť | Môže byť nullable alebo non-nullable | Musí byť non-nullable |
| Inicializácia | Automatická, pri prvom prístupe | Rukovacia |
| Odložená inicializácia | Áno, pri prvom prístupe | Áno, deklarácia bez inicializácie |
| Bezpečnosť vlákien | Predvolene bezpečné (synchronizácia), existujú možnosti | Nie je garantované, závisí od kontextu |
| Výnimka pri prístupe pred inicializáciou | Nie, automaticky sa inicializuje | UninitializedPropertyAccessException |