Middle
Kennst du geschlossene Klassen und was ist ihre Besonderheit?
sobes.tech KI
Antwort von AI
Ja, ich kenne es.
Die Besonderheit von sealed-Klassen besteht darin, dass sie die Vererbungs-Hierarchie einschränken. Alle direkten Untertypen einer sealed-Klasse müssen im selben Datei deklariert werden. Dies stellt sicher, dass der Compiler alle möglichen Untertypen kennt, was bei der Überprüfung der Vollständigkeit in when-Ausdrücken hilfreich ist.
Beispiel:
sealed class Result {
data class Success(val message: String) : Result()
data class Error(val code: Int, val description: String) : Result()
object Loading : Result() // Singleton für Ladezustand
}
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Erfolg: ${result.message}")
is Result.Error -> println("Fehler ${result.code}: ${result.description}")
Result.Loading -> println("Laden...")
// Es ist kein else erforderlich, da der Compiler alle Varianten kennt
}
}
Vorteile:
- Sicherheit: Gewährleistet Vollständigkeit der
when-Ausdrücke ohneelse. - Lesbarkeit: Deutliches Begrenzen der möglichen Zustände oder Untertypen.
- Kontrolle: Verhindert unkontrollierte Vererbung von außen.
Unterschied zu enum class: sealed-Klassen können unterschiedliche Datentypen für jeden Untertyp haben (wie Success und Error im Beispiel), während enum class-Elemente statisch sind und nur bestimmte Eigenschaften haben können, die für alle gelten. sealed-Klassen können auch Objekte-Instanzen (Loading) haben.