Middle
Co jsou 'lazy' a 'lateinit' v Kotlinu?
sobes.tech AI
Odpověď od AI
lazy - tulajdonságdelegát a késleltetett és változatlan (val) tulajdonságokhoz. Az érték az első hozzáféréskor kerül kiszámításra, majd cache-elve lesz.
// Lazy használat példája
val lazyValue: String by lazy {
println("Inicializálás") // csak egyszer fog megjelenni az első hozzáféréskor
"Szia, lazy!"
}
lateinit - módosító a módosítható (var) tulajdonságokhoz, amely lehetővé teszi az inicializálás késleltetését az első hozzáférésig. A tulajdonságnak nem null értékűnek kell lennie. A tulajdonság használata az inicializálás előtt UninitializedPropertyAccessException-t eredményez.
// Lateinit használat példája
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Szia, lateinit!"
}
fun useVariable() {
// Ellenőrzés, hogy inicializálva van-e a használat előtt (ajánlott)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("A változó még nincs inicializálva")
}
}
Fő különbségek:
| Jellemző | lazy |
lateinit |
|---|---|---|
| Tulajdonságtípus | val (csak olvasható) |
var (változtatható) |
| Nullability | Lehet nullable vagy non-nullable | Nem lehet null értékű |
| Inicializálás | Automatikus, az első hozzáféréskor | Kézi |
| Késleltetett inicializáció | Igen, az első hozzáféréskor | Igen, deklaráció nélküli inicializációval |
| Szálbiztonság | Alapértelmezett szálbiztonság (szinkronizáció), vannak opciók | Nem garantált, a kontextustól függ |
| Hozzáférés előtti kivétel | Nem, automatikusan inicializálódik | UninitializedPropertyAccessException |