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.