Sobes.tech
Middle

Was sind sealed-Klassen und was ist ihre Bestimmung?

sobes.tech KI

Antwort von AI

Versiegelte Klassen stellen begrenzte Klassenhierarchien dar. Sie werden verwendet, um eine eingeschränkte Menge möglicher Zustände oder Werte darzustellen.

Hauptmerkmale und Zweck:

  • Eingeschränkte Hierarchie: Die Nachkommen einer versiegelten Klasse müssen vor Kotlin 1.5 im selben Datei oder innerhalb der versiegelten Klasse deklariert werden. Seit Version 1.5 ist diese Einschränkung gelockert: Nachkommen können in jeder Datei desselben Pakets sein.
  • Enum-Klassen mit Zustand: Im Gegensatz zu Enum-Klassen kann jeder Nachkomme einer versiegelten Klasse eigenen Zustand und Verhalten haben.
  • Vollständiges when: Der Compiler stellt sicher, dass der when-Block für eine Instanz einer versiegelten Klasse vollständig ist (alle Fälle abgedeckt), wenn kein else-Zweig angegeben ist. Dies reduziert die Wahrscheinlichkeit von Laufzeitfehlern.

Beispiel:

sealed class Result<out T> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
    object Loading : Result<Nothing>() // Einzelnes Exemplar
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Verarbeitung des erfolgreichen Ergebnisses
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Verarbeitung des Fehlers
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Verarbeitung des Ladezustands
            println("Loading data...")
        }
        // Es ist kein `else`-Zweig erforderlich, da alle Unterklassen
        // von Result vom Compiler abgedeckt sind
    }
}

Zweck:

  • Sichere Darstellung von Zuständen: Zuverlässige Darstellung einer endlichen Anzahl möglicher Zustände, z.B. das Ergebnis einer Netzwerkanfrage (Success, Error, Loading).
  • Verbesserung der Lesbarkeit: Den Code expliziter machen bei der Behandlung verschiedener Fälle.
  • Erhöhung der Zuverlässigkeit von when-Ausdrücken: Der Compiler hilft, unbehandelte Fälle zu vermeiden.
  • Ersetzung von enum-Klassen mit Zustand: Wenn Daten mit bestimmten "Varianten" eines Enums verbunden werden müssen.

Auf diese Weise bieten versiegelte Klassen eine flexible Möglichkeit, endliche Mengen von Werten zu modellieren, wobei die Möglichkeit besteht, spezifische Daten für jeden Wert zu speichern, und gleichzeitig Sicherheit und Klarheit bei der Verarbeitung dieser Werte in when-Ausdrücken zu gewährleisten.