Sobes.tech
Junior — Middle

Wat is het verschil tussen het gebruik van sealed class en enum met betrekking tot hun constructors en de mogelijkheid om ze te maken?

sobes.tech AI

Antwoord van AI

Enum in Kotlin (en Java) vertegenwoordigt een set vaste constanten. Elke enum heeft een beperkt aantal instanties, gedefinieerd in de eigen verklaring. Enum-constructors zijn altijd privé, en het is niet mogelijk om nieuwe instanties te maken — alleen diegene die zijn gedeclareerd.

Sealed class (geweideerde klasse) is een abstracte klasse met een beperkt aantal subklassen, die in hetzelfde bestand worden gedeclareerd. In tegenstelling tot enum, maakt de geweideerde klasse het mogelijk om verschillende typen te maken met verschillende structuren en staten. De constructors van de geweideerde klasse kunnen open of gesloten zijn, en je kunt nieuwe instanties van subklassen maken, niet alleen vaste constanten.

Voorbeeld:

// Enum met privé-constructeur en vaste instanties
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Geweideerde klasse met verschillende subklassen en constructors
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

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

Op deze manier is de enum beperkt tot een vaste set instanties met een privé-constructeur, terwijl de geweideerde klasse flexibeler is en het mogelijk maakt om verschillende subklassen te maken met eigen constructors en staten.