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.