Junior
Objasnite kako funkcioni svojstvo 'lateinit' u Kotlinu.
sobes.tech АИ
Одговор од АИ
lateinit se koristi za deklarisanje svojstava koja nisu nullable i biće inicijalizovana kasnije, pre prvog pristupa.
- Primjenjuje se samo na promenljive (
var). - Ne može se koristiti sa primitivnim tipovima podataka (kao što su
Int,Boolean,Float), jer oni ne mogu bitinull. - Kompajler ne zahteva trenutnu inicijalizaciju svojstva pri njegovom deklarisanju.
- Ako se svojstvo koristi pre inicijalizacije, biće bačen izuzetak
UninitializedPropertyAccessException.
Primer:
class MyClass {
lateinit var myProperty: String // Svojstvo će biti inicijalizovano kasnije
fun initializeProperty(value: String) {
myProperty = value
}
fun useProperty() {
println(myProperty) // Sigurno nakon inicijalizacije
}
}
fun main() {
val obj = MyClass()
// obj.useProperty() // Ovde će biti bačen `UninitializedPropertyAccessException`
obj.initializeProperty("Hello")
obj.useProperty() // Ispisaće "Hello"
// Provera da li je inicijalizovano
if (obj::myProperty.isInitialized) {
println("Svojstvo je inicijalizovano")
}
}
Možete proveriti da li je lateinit svojstvo inicijalizovano pomoću refleksije: ::propertyName.isInitialized.
Upotreba lateinit je česta u framework-ovima gde se svojstva injektuju (dependency injection) nakon kreiranja objekta (npr. u Androidu sa UI elementima ili injekcijom zavisnosti).