Middle
Was sind 'lazy' und 'lateinit' in Kotlin?
sobes.tech KI
Antwort von AI
lazy - Delegat für die Eigenschaftsinitialisierung bei verzögerter und unveränderlicher (val) Eigenschaften. Der Wert wird bei der ersten Zugriff berechnet und dann zwischengespeichert.
// Beispiel für die Verwendung von lazy
val lazyValue: String by lazy {
println("Initialisierung") // wird nur einmal bei der ersten Verwendung ausgegeben
"Hallo, lazy!"
}
lateinit - Modifikator für veränderliche (var) Eigenschaften, der es ermöglicht, die Initialisierung bis zum ersten Zugriff aufzuschieben. Die Eigenschaft darf nicht null sein. Die Verwendung vor der Initialisierung führt zu einer UninitializedPropertyAccessException.
// Beispiel für die Verwendung von lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Hallo, lateinit!"
}
fun useVariable() {
// Überprüfung der Initialisierung vor der Verwendung (optional, aber empfohlen)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("Variable ist noch nicht initialisiert")
}
}
Hauptunterschiede:
| Merkmal | lazy |
lateinit |
|---|---|---|
| Eigenschaftstyp | val (nur lesbar) |
var (veränderlich) |
| Nullbarkeit | Kann nullable oder non-nullable sein | Muss non-nullable sein |
| Initialisierung | Automatisch, beim ersten Zugriff | Manuell |
| Verzögerung der Initialisierung | Ja, beim ersten Zugriff | Ja, bei Deklaration ohne Initialisierung |
| Thread-Sicherheit | Standardmäßig thread-sicher (Synchronisierung), Optionen vorhanden | Nicht garantiert, hängt vom Kontext ab |
| Ausnahme beim Zugriff vor Initialisierung | Nein, wird automatisch initialisiert | UninitializedPropertyAccessException |