Middle
Wat zijn 'lazy' en 'lateinit' in Kotlin?
sobes.tech AI
Antwoord van AI
lazy - eigenschapdelegaat voor uitgestelde en onveranderlijke (val) eigenschappen. De waarde wordt berekend bij de eerste toegang tot de eigenschap en vervolgens gecached.
// Voorbeeld van gebruik van lazy
val lazyValue: String by lazy {
println("Initialisatie") // wordt slechts één keer weergegeven bij eerste toegang
"Hallo, lazy!"
}
lateinit - modifier voor mutable (var) eigenschappen, waarmee de initialisatie kan worden uitgesteld tot het eerste gebruik. De eigenschap mag niet null zijn. Het gebruik van de eigenschap vóór initialisatie leidt tot een UninitializedPropertyAccessException.
// Voorbeeld van gebruik van lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Hallo, lateinit!"
}
fun useVariable() {
// Controleer of geïnitialiseerd voordat je het gebruikt (optioneel, maar aanbevolen)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("De variabele is nog niet geïnitialiseerd")
}
}
Belangrijkste verschillen:
| Kenmerk | lazy |
lateinit |
|---|---|---|
| Eigenschapstype | val (alleen-lezen) |
var (veranderlijk) |
| Nullbaarheid | Kan nullable of non-nullable zijn | Moet non-nullable zijn |
| Initialisatie | Automatisch, bij eerste toegang | Handmatig |
| Uitgestelde initialisatie | Ja, bij eerste toegang | Ja, bij declaratie zonder initialisatie |
| Threadveiligheid | Standaard thread-safe (synchronisatie), opties beschikbaar | Niet gegarandeerd, afhankelijk van de context |
| Uitzondering bij toegang vóór initialisatie | Nee, wordt automatisch geïnitialiseerd | UninitializedPropertyAccessException |