Sobes.tech
Junior

Erklären Sie, was Null-Sicherheit in der Kotlin-Sprache ist.

sobes.tech KI

Antwort von AI

Null Safety — ist eine Funktion der Programmiersprache Kotlin, die Fehler im Zusammenhang mit null-Referenzen verhindert. Sie wird erreicht, indem zwei Referenztypen erstellt werden: nullable (erlaubt null) und non-nullable (erlaubt kein null).

Nicht-nullbare Typen werden wie üblich deklariert:

var nonNullableString: String = "Hello" // Kann nicht null sein

Nullable Typen werden mit dem Symbol ? nach dem Typnamen deklariert:

var nullableString: String? = "Hello" // Kann null sein
nullableString = null

Kotlin erfordert eine explizite Behandlung von nullable Typen, um direkten Zugriff auf deren Mitglieder ohne vorherige null-Prüfung zu vermeiden. Dafür stehen folgende Mechanismen zur Verfügung:

  1. Sicherer Aufruf-Operator (?.): Ruft eine Methode oder Property nur auf, wenn das Objekt nicht null ist. Andernfalls gibt es null zurück.

    val length = nullableString?.length // length ist Int? oder null
    
  2. Elvis-Operator (?:): Gibt einen Standardwert zurück, wenn der Ausdruck links vom Operator null ist.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength ist Int, 0 wenn nullableString null
    
  3. Nicht-Null-Assertion-Operator (!!): Wandelt einen nullable Typ in einen non-nullable Typ um. Wenn der Wert null ist, wird eine NullPointerException ausgelöst. Wird verwendet, wenn der Entwickler sicher ist, dass der Wert nicht null ist.

    val sureLength = nullableString!!.length // Löst NullPointerException aus, wenn nullableString null ist
    
  4. if-Prüfungen: Traditionelle null-Prüfung mit if. Der Compiler führt innerhalb des if-Blocks eine sogenannte Smart Cast durch, sodass der nullable Typ als non-nullable behandelt wird, wenn die Prüfung bestanden wurde.

    if (nullableString != null) {
        val length = nullableString.length // Hier wird nullableString als String behandelt
    }
    

Diese Mechanismen ermöglichen eine explizite Steuerung der Situationen, in denen eine Variable null sein kann, was die Wahrscheinlichkeit von NullPointerException-Fehlern zur Laufzeit deutlich reduziert.