Sobes.tech
Junior

Leg uit hoe de eigenschap 'lateinit' in Kotlin werkt.

sobes.tech AI

Antwoord van AI

lateinit wordt gebruikt om niet-nullbare eigenschappen te declareren die later worden geïnitialiseerd, vóór de eerste toegang.

  • Alleen toegepast op wijzigbare eigenschappen (var).
  • Kan niet worden gebruikt met primitieve datatypes (zoals Int, Boolean, Float), omdat deze niet null kunnen zijn.
  • De compiler vereist geen onmiddellijke initialisatie van de eigenschap bij de declaratie.
  • Als de eigenschap wordt gebruikt voordat deze is geïnitialiseerd, wordt een UninitializedPropertyAccessException gegooid.

Voorbeeld:

class MyClass {
    lateinit var myProperty: String // De eigenschap wordt later geïnitialiseerd

    fun initializeProperty(value: String) {
        myProperty = value
    }

    fun useProperty() {
        println(myProperty) // Veilig na initialisatie
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Hier wordt een UninitializedPropertyAccessException gegooid
    obj.initializeProperty("Hello")
    obj.useProperty() // Zal "Hello" afdrukken

    // Initialisatie controleren
    if (obj::myProperty.isInitialized) {
        println("Eigenschap geïnitialiseerd")
    }
}

Het is mogelijk om te controleren of een lateinit eigenschap is geïnitialiseerd met behulp van reflectie: ::propertyName.isInitialized.

Het gebruik van lateinit komt vaak voor in frameworks waar eigenschappen worden geïnjecteerd (dependency injection) na het maken van het object (bijvoorbeeld in Android met UI-elementen of dependency injection).