Sobes.tech
Junior — Middle

Worin besteht der Unterschied zwischen der Verwendung von sealed class und enum in Bezug auf ihre Konstruktoren und die Möglichkeit, sie zu erstellen?

sobes.tech KI

Antwort von AI

Enum in Kotlin (und Java) stellt eine Menge fester Konstanten dar. Jedes Enum hat eine begrenzte Anzahl von Instanzen, die in der Deklaration selbst definiert sind. Enum-Konstruktoren sind immer privat, und es können keine neuen Instanzen erstellt werden — nur die, die deklariert sind.

Sealed Class (versiegelte Klasse) ist eine abstrakte Klasse mit einer begrenzten Anzahl von Unterklassen, die in derselben Datei deklariert sind. Im Gegensatz zum Enum ermöglicht die versiegelte Klasse die Erstellung verschiedener Typen mit unterschiedlichen Strukturen und Zuständen. Die Konstruktoren der versiegelten Klasse können offen oder geschlossen sein, und es können neue Instanzen von Unterklassen erstellt werden, nicht nur feste Konstanten.

Beispiel:

// Enum mit privatem Konstruktor und festen Instanzen
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Versiegelte Klasse mit verschiedenen Unterklassen und Konstruktoren
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

val res: Result = Result.Success("OK")

Auf diese Weise ist das Enum auf eine feste Menge von Instanzen mit privatem Konstruktor beschränkt, während die versiegelte Klasse flexibler ist und die Erstellung verschiedener Unterklassen mit eigenen Konstruktoren und Zuständen ermöglicht.