Middle
Qu'est-ce que 'lazy' et 'lateinit' en Kotlin?
sobes.tech IA
Réponse de l'IA
lazy - délégué de propriété pour l'initialisation paresseuse des propriétés immuables (val). La valeur est calculée lors de la première référence à la propriété, puis mise en cache.
// Exemple d'utilisation de lazy
val lazyValue: String by lazy {
println("Initialisation") // affiché une seule fois lors de la première référence
"Bonjour, lazy!"
}
lateinit - modificateur pour propriétés mutables (var), permettant de retarder l'initialisation jusqu'au premier accès. La propriété doit être non nulle. Utiliser la propriété avant l'initialisation entraîne une UninitializedPropertyAccessException.
// Exemple d'utilisation de lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Bonjour, lateinit!"
}
fun useVariable() {
// Vérification de l'initialisation avant utilisation (optionnel, mais recommandé)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("La variable n'est pas encore initialisée")
}
}
Principales différences:
| Caractéristique | lazy |
lateinit |
|---|---|---|
| Type de propriété | val (lecture seule) |
var (mutable) |
| Nullabilité | Peut être nullable ou non nullable | Doit être non nullable |
| Initialisation | Automatique, lors de la première utilisation | Manuelle |
| Retard d'initialisation | Oui, lors de la première utilisation | Oui, déclaration sans initialisation |
| Sécurité thread | Par défaut thread-safe (synchronisation), options disponibles | Non garanti, dépend du contexte |
| Exception lors d'une utilisation avant initialisation | Non, initialisé automatiquement | UninitializedPropertyAccessException |