Junior
Vysvetlite, ako funguje vlastnosť 'lateinit' v Kotlin.
sobes.tech AI
Odpoveď od AI
lateinit sa koristi za deklaráciu ne-nullovateľných vlastností, ktoré budú neskôr inicializované pred prvým použitím.
- Platí len pre meniteľné vlastnosti (
var). - Nemôže sa použiť s primitívnymi dátovými typmi (ako
Int,Boolean,Float), pretože tieto nemôžu byťnull. - Kompilátor nevyžaduje okamžitú inicializáciu vlastnosti pri jej deklarácii.
- Ak sa vlastnosť použije pred inicializáciou, bude vyhodená výnimka
UninitializedPropertyAccessException.
Príklad:
class MyClass {
lateinit var myProperty: String // Vlastnosť bude neskôr inicializovaná
fun initializeProperty(value: String) {
myProperty = value
}
fun useProperty() {
println(myProperty) // Bezpečné po inicializácii
}
}
fun main() {
val obj = MyClass()
// obj.useProperty() // Tu bude vyhodená `UninitializedPropertyAccessException`
obj.initializeProperty("Hello")
obj.useProperty() // Vypíše "Hello"
// Kontrola, či je vlastnosť inicializovaná
if (obj::myProperty.isInitialized) {
println("Vlastnosť je inicializovaná")
}
}
Je možné skontrolovať, či vlastnosť lateinit bola inicializovaná pomocou reflexie: ::propertyName.isInitialized.
Použitie lateinit je bežné v frameworkoch, kde sú vlastnosti injektované (dependency injection) po vytvorení objektu (napríklad v Android s UI prvkami alebo injektovaním závislostí).