Kotlin Academy · Lektion

Smart Casts

Automatisches Casten nach Prüfungen

Lektion 2 von 413 Schritte

Smart Casts ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Was sind Smart Casts

Nachdem Sie den Typ eines Werts geprüft haben, merkt sich Kotlin diese Information. Innerhalb des geprüften Blocks behandelt Kotlin den Wert automatisch als den präziseren Typ.

Diese Funktion wird als Smart Cast bezeichnet und macht manuelle Casts überflüssig.

Smart Cast nach is

Sobald eine is-Prüfung erfolgreich ist, können Sie den Wert als diesen Typ verwenden, ohne einen Cast zu schreiben.

Der Compiler fügt ihn für Sie ein.

fun describe(x: Any) {
    if (x is String) {
        println(x.length) // x is smart-cast to String
    }
}

fun main() {
    describe("hello")
}

Smart Cast nach einer Nullprüfung

Smart Casts funktionieren auch bei der Nullbarkeit. Nachdem Sie bestätigt haben, dass ein Wert nicht null ist, wird er als nicht null behandelt.

fun length(text: String?): Int {
    if (text != null) {
        return text.length // smart-cast to non-null String
    }
    return 0
}

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

Smart Casts in when

Typprüfungen innerhalb von when ermöglichen ebenfalls Smart Casts in jedem Zweig.

Das ist die idiomatische Vorgehensweise für den Umgang mit mehreren möglichen Typen.

fun area(shape: Any): Double = when (shape) {
    is Int -> shape.toDouble()
    is String -> shape.length.toDouble()
    else -> 0.0
}

fun main() {
    println(area(5))
    println(area("hello"))
}

Smart Cast mit vorzeitigem Return

Wenn Sie bei einem null-Wert vorzeitig zurückkehren, weiß der Compiler anschließend, dass der Wert nicht null ist.

Der restliche Teil der Funktion verwendet den Wert sicher.

fun process(text: String?) {
    if (text == null) return
    println(text.uppercase()) // smart-cast here
}

fun main() {
    process("data")
    process(null)
}

Smart Cast mit Elvis-Return

Auch die Kombination von Elvis und return löst für den verbleibenden Code einen Smart Cast aus.

fun process(text: String?) {
    val safe = text ?: return
    println(safe.length) // safe is non-null
}

fun main() {
    process("hi")
    process(null)
}

Kombinierte Bedingungen

Smart Casts berücksichtigen die Logik kombinierter Bedingungen mit &&.

Nach der Typprüfung auf der linken Seite sieht die rechte Seite den präziseren Typ bereits.

fun check(x: Any) {
    if (x is String && x.length > 3) {
        println("long string")
    } else {
        println("other")
    }
}

fun main() {
    check("hello")
    check(2)
}

Wenn Smart Casts fehlschlagen

Smart Casts benötigen die Garantie, dass sich der Wert zwischen Prüfung und Verwendung nicht ändert.

Ein veränderliches var, das gleichzeitig geändert werden könnte, lässt sich möglicherweise nicht per Smart Cast umwandeln. Verwenden Sie für zuverlässige Smart Casts bevorzugt val.

fun main() {
    val text: String? = "stable"
    if (text != null) {
        println(text.length) // val smart-casts cleanly
    }
}

Lokales val ist am sichersten

Wenn Sie einen Wert in ein lokales val kopieren, werden Smart Casts zuverlässig.

Das ist ein gängiges Muster bei der Arbeit mit nullable Eigenschaften.

class Box(val content: String?)

fun main() {
    val box = Box("item")
    val c = box.content
    if (c != null) {
        println(c.uppercase())
    }
}

Smart Cast und expliziter Cast

Smart Casts ersetzen die meisten expliziten as-Casts. Sie sind sicherer, weil sie nur dort angewendet werden, wo der Typ nachgewiesen ist.

Als Nächstes lernen Sie explizite is- und as-Ausdrücke kennen.

fun main() {
    val x: Any = "text"
    if (x is String) {
        // no need for (x as String)
        println(x.reversed())
    }
}

Alles zusammenführen

Smart Casts ermöglichen es dem Compiler, Typen automatisch einzugrenzen:

  • Nach is-Prüfungen → Cast in diesen Typ
  • Nach Nullprüfungen → Cast in einen nicht nullbaren Typ
  • Funktionieren in if, when und nach vorzeitigen Returns
  • Am zuverlässigsten mit val
fun render(x: Any): String {
    if (x is Int) return "number " + x
    if (x is String) return "text " + x.uppercase()
    return "unknown"
}

fun main() {
    println(render(7))
    println(render("go"))
}

Kurzer Test

Testen Sie Ihr Verständnis von Smart Casts.

Zusammenfassung

Sie haben Smart Casts kennengelernt:

  • Typ- und Nullprüfungen grenzen den Typ automatisch ein
  • Sie funktionieren in if, when und nach vorzeitigen Returns
  • val ermöglicht die zuverlässigsten Smart Casts

Als Nächstes lernen Sie die Operatoren is und as direkt kennen.

Kostenlos starten

Lerne Kotlin mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „Smart Casts“ kostenlos?

Ja — der vollständige Text von „Smart Casts“ 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 „Smart Casts“?

Automatisches Casten nach Prüfungen 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 2 von 4.

Wie lange dauert die Lektion „Smart Casts“?

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. when als Ausdruck
  2. Smart Casts
  3. Operatoren is und as
  4. Vollständiges when
← Zurück zu Kotlin Academy