Sobes.tech
Junior

Expliquez comment fonctionne la propriété 'lateinit' en Kotlin.

sobes.tech IA

Réponse de l'IA

lateinit est utilisé pour déclarer des propriétés non nullables qui seront initialisées plus tard, avant la première utilisation.

  • S'applique uniquement aux propriétés modifiables (var).
  • Ne peut pas être utilisé avec des types de données primitifs (comme Int, Boolean, Float), car ils ne peuvent pas être null.
  • Le compilateur ne nécessite pas une initialisation immédiate de la propriété lors de sa déclaration.
  • Si la propriété est utilisée avant son initialisation, une exception UninitializedPropertyAccessException sera levée.

Exemple:

class MyClass {
    lateinit var myProperty: String // La propriété sera initialisée plus tard

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

    fun useProperty() {
        println(myProperty) // Sûr après l'initialisation
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Ici, une exception UninitializedPropertyAccessException sera levée
    obj.initializeProperty("Hello")
    obj.useProperty() // Affichera "Hello"

    // Vérification de l'initialisation
    if (obj::myProperty.isInitialized) {
        println("Propriété initialisée")
    }
}

Il est possible de vérifier si une propriété lateinit a été initialisée en utilisant la réflexion : ::propertyName.isInitialized.

L'utilisation de lateinit est courante dans les frameworks où les propriétés sont injectées (injection de dépendances) après la création de l'objet (par exemple, en Android avec des éléments UI ou l'injection de dépendances).