Junior
Vysvětlete, jak funguje vlastnost 'lateinit' v Kotlinu.
sobes.tech AI
Odpověď od AI
lateinit se používá k deklaraci ne-nullovatelného vlastnosti, která bude později inicializována, před prvním přístupem k ní.
- Používá se pouze u měnitelných vlastností (
var). - Nelze jej použít s primitivními datovými typy (například
Int,Boolean,Float), protože ty nemohou býtnull. - Kompilátor nevyžaduje okamžitou inicializaci vlastnosti při jejím deklarování.
- Pokud je vlastnost použita před inicializací, bude vyhozena výjimka
UninitializedPropertyAccessException.
Příklad:
class MyClass {
lateinit var myProperty: String // Vlastnost bude později inicializována
fun initializeProperty(value: String) {
myProperty = value
}
fun useProperty() {
println(myProperty) // Bezpečné po inicializaci
}
}
fun main() {
val obj = MyClass()
// obj.useProperty() // Zde dojde k vyhození `UninitializedPropertyAccessException`
obj.initializeProperty("Hello")
obj.useProperty() // Vypíše "Hello"
// Kontrola, zda je vlastnost inicializována
if (obj::myProperty.isInitialized) {
println("Vlastnost je inicializována")
}
}
Lze zkontrolovat, zda vlastnost lateinit byla inicializována, pomocí reflexe: ::propertyName.isInitialized.
Použití lateinit je běžné ve frameworkách, kde jsou vlastnosti injektovány (dependency injection) po vytvoření objektu (například v Androidu s UI prvky nebo injekcí závislostí).