Qual è la differenza tra l'uso di sealed class e enum in relazione ai loro costruttori e alla possibilità di crearli?
sobes.tech AI
Risposta dell'AI
Enum in Kotlin (e Java) rappresenta un insieme di costanti fisse. Ogni enum ha un insieme limitato di istanze, definite nella stessa dichiarazione. I costruttori di enum sono sempre privati, e non è possibile creare nuove istanze — solo quelle dichiarate.
La sealed class (classe sigillata) è una classe astratta con un insieme limitato di sottoclassi, dichiarate nello stesso file. A differenza dell’enum, la sealed class permette di creare diversi tipi con strutture e stati differenti. I costruttori della sealed class possono essere aperti o chiusi, e si possono creare nuove istanze delle sottoclassi, non solo costanti fisse.
Esempio:
// Enum con costruttore privato e istanze fisse
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Sealed class con diverse sottoclassi e costruttori
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
In questo modo, l’enum è limitato a un insieme fisso di istanze con un costruttore privato, mentre la sealed class è più flessibile, consentendo di creare diverse sottoclassi con propri costruttori e stati.