Sobes.tech
Middle

Wie man versiegelte Klassen zur Modellierung von Hierarchien in Kotlin verwendet?

sobes.tech KI

Antwort von AI

Versiegelte Klassen (sealed classes) werden verwendet, um begrenzte Vererbungs-Hierarchien darzustellen, bei denen alle möglichen Unterklassen zur Kompilierungszeit bekannt sind.

Hauptmerkmale:

  • Alle direkten Unterklassen müssen sich in derselben Datei wie die versiegelte Klasse befinden (vor Kotlin 1.5). Ab Kotlin 1.5 können sie in jeder Datei derselben Kompilierung sein.
  • Unterklassen einer versiegelten Klasse können normale Klassen, Datenklassen, Object-Deklarationen oder andere versiegelte Klassen sein.
  • Der Konstruktor der versiegelten Klasse ist standardmäßig privat; andere Modifikatoren (public, protected, internal) sind nicht erlaubt.
  • Erlauben die Verwendung einer vollständigen (exhaustive) Analyse in when-Ausdrücken, was die Behandlung aller möglichen Fälle garantiert und die Notwendigkeit eines else-Zweigs eliminiert.

Beispiel zur Modellierung des Zustands einer Benutzeroberfläche:

sealed class UiState {
    object Loading : UiState() // Ladezustand
    data class Success(val data: String) : UiState() // Erfolgreiches Laden der Daten
    data class Error(val message: String) : UiState() // Fehler
}

Verwendung in einer when-Ausdruck:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Daten werden geladen..."
        is UiState.Success -> "Daten erfolgreich geladen: ${state.data}"
        is UiState.Error -> "Fehler: ${state.message}"
    }
}

Vorteile:

  • Typsicherheit: Der Compiler überprüft, ob alle möglichen Unterklassen behandelt werden.
  • Lesbarkeit: Zeigt klar, welche Varianten von Daten oder Zuständen existieren können.
  • Bequemlichkeit: Vereinfacht die Arbeit mit when-Ausdrücken.