Sobes.tech
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