NullPointerExceptions vermeiden
Muster für sicheren Code.
NullPointerExceptions vermeiden ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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 Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Ziel: keine NPEs
Eine NullPointerException, kurz NPE, tritt auf, wenn der Code etwas verwendet, das tatsächlich null ist. Kotlin wurde so entwickelt, dass dies nur selten vorkommt.
In dieser Lektion werden die bisher erlernten Werkzeuge zusammengeführt. Außerdem erfahren Sie, auf welche wenigen Arten eine NPE dennoch auftreten kann.
Der Operator !!
Die Not-null-Assertion !! weist den Compiler an, darauf zu vertrauen, dass ein Wert nicht null ist. Wenn diese Annahme falsch ist, wird eine NPE ausgelöst.
Dadurch wird die Sicherheit aufgehoben. Verwenden Sie den Operator daher nur selten und nur, wenn Sie sicher sind.
fun main() {
val name: String? = "Ada"
println(name!!.length) // works, name is not null
}!! kann Abstürze verursachen
Wenn der Wert tatsächlich null ist, löst !! genau in dieser Zeile eine NullPointerException aus.
Das ist die wichtigste Möglichkeit, das Problem wieder einzuführen, das Kotlin eigentlich verhindert. Vermeiden Sie !!, wenn ein Safe Call oder Elvis ausreichen würde.
val name: String? = null
println(name!!.length)
// throws KotlinNullPointerExceptionSichere Alternativen bevorzugen
Fast jede Verwendung von !! lässt sich mit ?. und ?: umschreiben. Die sichere Variante kann nicht abstürzen.
Vergleichen Sie unten die riskante und die sichere Schreibweise.
// Risky:
val len1 = name!!.length
// Safe:
val len2 = name?.length ?: 0Frühzeitig validieren
Behandeln Sie null an der Grenze Ihres Codes und arbeiten Sie innerhalb des Codes anschließend mit nicht nullen Werten. Verwenden Sie Elvis mit return oder throw, um fehlende Eingaben sofort zurückzuweisen.
Nach dieser Prüfung wird der Wert per Smart Cast als nicht null behandelt.
fun length(s: String?): Int {
val text = s ?: return 0
return text.length
}requireNotNull
Wenn null tatsächlich auf einen Fehler hindeutet, löst requireNotNull einen verständlichen Fehler aus und gibt den nicht nullen Wert zurück.
Die Funktion ist aussagekräftiger als !!, da Sie eine Nachricht hinzufügen können.
fun start(config: String?) {
val c = requireNotNull(config) { "config missing" }
println(c.length)
}Plattformtypen aus Java
Aus Java stammende Werte haben eine unbekannte Nullbarkeit und werden als Plattformtypen bezeichnet. Kotlin kann nicht garantieren, dass sie nicht null sind.
Wenn Sie Java-Bibliotheken verwenden, deklarieren Sie den erwarteten Typ explizit und behandeln Sie null vorsichtshalber.
// From Java: String maybe = obj.getName();
val name: String? = obj.name // be safe
println(name?.length ?: 0)Die Falle bei lateinit
Mit einer lateinit var können Sie die Initialisierung einer nicht nullbaren Eigenschaft aufschieben. Wenn Sie sie jedoch vor der Zuweisung verwenden, wird eine Exception ausgelöst.
Verwenden Sie lateinit nur, wenn Sie sicher sind, dass der Wert vor jedem Zugriff gesetzt wird.
lateinit var config: String
fun read() {
println(config.length)
// crashes if config was never set
}Standardwerte statt null
Oft können Sie Nullbarkeit vollständig vermeiden, indem Sie einen sinnvollen Standardwert wählen. Eine leere Zeichenkette oder eine leere Liste ist häufig besser als null.
Weniger nullable Typen bedeuten weniger Möglichkeiten für eine NPE.
fun main() {
val tags: List<String> = emptyList()
println(tags.size) // 0, never null
}Eine sichere Verarbeitungskette
Dieses Programm liest einen optionalen Wert ein, wandelt ihn sicher um und erzeugt immer ein Ergebnis. Kein !!, kein Absturz.
Das ist der Stil, den Sie in echtem Android-Code anstreben sollten.
fun main() {
val input: String? = null
val result = input?.trim()?.uppercase() ?: "N/A"
println(result) // prints: N/A
}Bewährte Vorgehensweisen
Bevorzugen Sie nicht nullable Typen, behandeln Sie null an den Grenzen mit Elvis und verwenden Sie ?.let für optionale Aktionen. Heben Sie !! für die seltenen Fälle auf, in denen null unmöglich ist.
Wenn Sie diese Gewohnheiten befolgen, gehören NullPointerExceptions der Vergangenheit an.
val safe = data?.value ?: default
data?.let { handle(it) }Kurzer Test
Testen Sie Ihr Verständnis davon, wie Sie NullPointerExceptions vermeiden.
Zusammenfassung
NPEs in Kotlin entstehen meistens durch !!, Plattformtypen aus Java oder nicht initialisierte lateinit-Werte. Vermeiden Sie sie, indem Sie nicht nullable Typen und sichere Operatoren bevorzugen.
Verwenden Sie ?., ?:, ?.let und Validierungen wie requireNotNull, damit der Code absturzfrei bleibt. Damit haben Sie nun die Grundlagen der Null-Sicherheit in Kotlin abgeschlossen.
Häufig gestellte Fragen
Ist die Lektion „NullPointerExceptions vermeiden“ kostenlos?
Ja — der vollständige Text von „NullPointerExceptions vermeiden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „NullPointerExceptions vermeiden“?
Muster für sicheren Code. Du übst Android 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 Android Academy zu starten?
Keine Vorkenntnisse erforderlich. Android 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 4 von 4.
Wie lange dauert die Lektion „NullPointerExceptions vermeiden“?
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 Android Academy-Lektion Code schreiben und ausführen?
Ja. Jede Android 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
- Nullable- und Non-Null-Typen
- Sichere Aufrufe und Elvis
- let, also und Scope-Funktionen
- NullPointerExceptions vermeiden