Junior
Paaiškinkite, kaip veikia 'lateinit' savybė Kotlin.
sobes.tech AI
Atsakymas iš AI
lateinit naudojamas ne-nullabilioms savybėms deklaruoti, kurios vėliau bus inicializuotos, prieš pirmąjį jų naudojimą.
- Taikoma tik keičiamoms savybėms (
var). - Negali būti naudojama su primityviais duomenų tipais (pvz.,
Int,Boolean,Float), nes jie negali būtinull. - Kompiliatorius nereikalauja iš karto inicializuoti savybę jos deklaravimo metu.
- Jei savybė naudojama prieš inicializaciją, bus išmesta išimtis
UninitializedPropertyAccessException.
Pavyzdys:
class MyClass {
lateinit var myProperty: String // Savybė vėliau bus inicializuota
fun initializeProperty(value: String) {
myProperty = value
}
fun useProperty() {
println(myProperty) // Saugu po inicializacijos
}
}
fun main() {
val obj = MyClass()
// obj.useProperty() // Čia bus išmesta `UninitializedPropertyAccessException`
obj.initializeProperty("Hello")
obj.useProperty() // Išves "Hello"
// Inicializacijos patikrinimas
if (obj::myProperty.isInitialized) {
println("Savybė yra inicializuota")
}
}
Galite patikrinti, ar lateinit savybė yra inicializuota, naudojant refleksiją: ::propertyName.isInitialized.
lateinit naudojimas dažnai pasitaiko framework'uose, kur savybės injekuojamos (dependency injection) po objekto sukūrimo (pavyzdžiui, Android UI elementuose ar priklausomybių injekcijoje).