V čem spočívá rozdíl mezi použitím sealed class a enum z hlediska jejich konstruktorů a možnosti jejich vytváření?
sobes.tech AI
Odpověď od AI
Enum v Kotlinu (a Java) představuje množinu pevných konstant. Každý enum má omezenou sadu instancí, definovaných přímo v deklaraci. Konstruktor enum je vždy soukromý a nelze vytvářet nové instance — pouze ty, které jsou deklarovány.
Sealed třída (uzavřená třída) je abstraktní třída s omezeným počtem potomků, kteří jsou deklarováni ve stejném souboru. Na rozdíl od enum umožňuje sealed třída vytvářet různé typy s různou strukturou a stavem. Konstruktor sealed třídy může být otevřený nebo uzavřený, a je možné vytvářet nové instance potomků, nikoliv pouze pevné konstanty.
Příklad:
// Enum s privátním konstruktorem a pevnými instancemi
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Sealed třída s různými potomky a konstruktory
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
Tímto je enum omezen na pevný počet instancí s privátním konstruktorem, sealed třída je však flexibilnější a umožňuje vytváření různých podtříd s vlastními konstruktory a stavy.