Sobes.tech
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 ohne else.
  • 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.