0Pricing
Kotlin Academy · Lektion

Der Operator !!

Erzwingen Sie Non-Null und lernen Sie die Risiken kennen

Der Operator !! ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Nicht-Null erzwingen

Manchmal sind Sie sicher, dass ein nullable Wert nicht null ist, aber der Compiler meldet trotzdem einen Fehler.

Der Not-Null-Assertion-Operator !! weist den Compiler an, Ihnen zu vertrauen und den Wert als nicht-null zu behandeln.

Grundlegende Verwendung

Durch das Hinzufügen von !! wird ein nullable Typ in sein nicht-null-Gegenstück umgewandelt.

Wenn der Wert tatsächlich nicht null ist, funktioniert der Code genau wie ein normaler Aufruf.

fun main() {
    val name: String? = "Kotlin"
    println(name!!.length)
}

Die Gefahr

Wenn der Wert tatsächlich null ist, löst !! genau an dieser Stelle eine NullPointerException aus.

Dies ist die einzige Stelle, an der Kotlin eine NPE zulässt, und die Verantwortung dafür liegt vollständig bei Ihnen.

fun main() {
    val name: String? = null
    try {
        println(name!!.length)
    } catch (e: NullPointerException) {
        println("Boom: NullPointerException")
    }
}

Warum es den Operator gibt

Der Operator ist absichtlich unansehnlich. Zwei Ausrufezeichen fallen beim Code-Review auf und signalisieren eine Stelle, an der Sie das Sicherheitsnetz umgehen.

Er existiert für die seltenen Fälle, in denen Sie tatsächlich mehr wissen als der Compiler.

Ein Safe Call ist meist besser

In den meisten Situationen ist ein Safe Call ?. mit dem Elvis-Operator ?: sicherer und genauso kurz.

Vergleichen Sie unten die beiden Ansätze für dasselbe Ziel.

fun main() {
    val name: String? = null
    val safeLength = name?.length ?: 0
    println(safeLength)
}

Verketten Sie nicht mehrere !!

Verketten Sie niemals mehrere !! wie bei a!!.b!!.c. Wenn der Code abstürzt, können Sie nicht erkennen, welcher Teil null war.

Teilen Sie den Ausdruck auf oder verwenden Sie stattdessen Safe Calls.

fun main() {
    val text: String? = "hi"
    // bad style: text!!.uppercase()!! is hard to debug
    val good = text?.uppercase() ?: ""
    println(good)
}

Ein berechtigter Einsatz

Ein akzeptabler Fall ist ein Wert, den Sie zuvor gesetzt haben und von dem Sie wissen, dass er inzwischen initialisiert wurde.

Auch dann sollten Sie nach Möglichkeit lateinit verwenden oder den Code umstrukturieren.

fun main() {
    var config: String? = null
    config = "loaded"
    // we just assigned it, so !! is safe here
    println(config!!.uppercase())
}

Stacktrace lesen

Wenn !! fehlschlägt, verweist die Exception auf die genaue Zeile. Diese Präzision ist der einzige Vorteil gegenüber einem stillschweigend falschen Ergebnis.

Verwenden Sie die Meldung, um die falsche Annahme zu finden und zu korrigieren.

fun length(text: String?): Int {
    return text!!.length
}

fun main() {
    println(length("abc"))
    // length(null) would throw on the !! line
}

!! durch Umstrukturierung vermeiden

Die meisten Vorkommen von !! lassen sich durch eine korrekte Behandlung von null entfernen. Unten sorgt ein Elvis-Ersatzwert dafür, dass die Funktion für alle Eingaben definiert und absturzfrei ist.

fun length(text: String?): Int {
    return text?.length ?: 0
}

fun main() {
    println(length("abc"))
    println(length(null))
}

Faustregel

Betrachten Sie jedes !! als eine Frage: Bin ich absolut sicher, dass dieser Wert niemals null ist?

  • Wenn ja und selten → akzeptabel
  • Wenn Sie unsicher sind → verwenden Sie ?. und ?:

Alles zusammenführen

Der Operator !! ist ein scharfes Werkzeug:

  • Er erzwingt die Umwandlung eines nullable Werts in einen nicht-null Typ
  • Er löst eine NullPointerException aus, wenn der Wert null ist
  • In fast allen Fällen sollten Sie Safe Calls und den Elvis-Operator bevorzugen
fun main() {
    val sure: String? = "definitely here"
    println(sure!!.length)
    val maybe: String? = null
    println(maybe?.length ?: -1)
}

Kurzer Test

Überprüfen Sie Ihr Verständnis des Not-Null-Assertion-Operators.

Zusammenfassung

Sie haben den Operator !! kennengelernt:

  • Er versichert, dass ein nullable Wert nicht null ist
  • Bei einer falschen Annahme löst er eine NullPointerException aus
  • Er sollte nur als letzter Ausweg und nicht aus Gewohnheit verwendet werden

Als Nächstes erfahren Sie, wie Nullbarkeit aus Java über Plattformtypen nach Kotlin gelangt.

Häufig gestellte Fragen

Ist die Lektion „Der Operator !!“ kostenlos?

Ja — der vollständige Text von „Der Operator !!“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Der Operator !!“?

Erzwingen Sie Non-Null und lernen Sie die Risiken kennen Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Der Operator !!“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Nullable- und Non-Null-Typen
  2. Sichere Aufrufe und Elvis
  3. Der Operator !!
  4. Plattformtypen
← Zurück zu Kotlin Academy