Junior
Selgitage, kuidas töötab 'lateinit' omadus Kotlinis.
sobes.tech AI
Vastus AI-lt
lateinit kasutatakse mitte-nullitavate omaduste deklaratsiooniks, mis hiljem initsialiseeritakse enne nende esimest kasutamist.
- Rakendub ainult muudetavatele omadustele (
var). - Ei saa kasutada primitiivsete andmetüüpidega (nagu
Int,Boolean,Float), kuna need ei saa ollanull. - Kompilaator ei nõua omaduse kohest initsialiseerimist selle deklaratsiooni ajal.
- Kui omadust kasutatakse enne initsialiseerimist, visatakse välja erind
UninitializedPropertyAccessException.
Näide:
class MyClass {
lateinit var myProperty: String // Omadus initsialiseeritakse hiljem
fun initializeProperty(value: String) {
myProperty = value
}
fun useProperty() {
println(myProperty) // Turvaline pärast initsialiseerimist
}
}
fun main() {
val obj = MyClass()
// obj.useProperty() // Siin visatakse `UninitializedPropertyAccessException`
obj.initializeProperty("Hello")
obj.useProperty() // Kuvab "Hello"
// Initsialiseerimise kontroll
if (obj::myProperty.isInitialized) {
println("Omadus on initsialiseeritud")
}
}
Saate kontrollida, kas lateinit omadus on initsialiseeritud, kasutades refleksiooni: ::propertyName.isInitialized.
lateinit kasutamine on levinud raamistikutes, kus omadused süstitakse (dependency injection) pärast objekti loomist (näiteks Androidis UI elementidega või sõltuvuste injekteerimisel).