Aký je rozdiel medzi použitím sealed class a enum z hľadiska ich konštruktorov a možnosti ich vytvárania?
sobes.tech AI
Odpoveď od AI
Enum v Kotlinu (a Java) predstavuje množinu pevných konštánt. Každý enum má obmedzený počet inštancií, definovaných v samotnej deklarácii. Konštruktory enum sú vždy súkromné, a nie je možné vytvárať nové inštancie — len tie, ktoré sú deklarované.
Sealed class (zalepená trieda) je abstraktná trieda s obmedzeným počtom potomkov, ktoré sú deklarované v tom istom súbore. Na rozdiel od enum umožňuje sealed class vytvárať rôzne typy s rôznou štruktúrou a stavom. Konštruktory sealed class môžu byť otvorené alebo zatvorené, a je možné vytvárať nové inštancie potomkov, nie len pevné konštanty.
Príklad:
// Enum s privátnym konštruktorom a pevnými inštanciami
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Sealed class s rôznymi potomkami a konštruktormi
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 obmedzený na pevný počet inštancií s privátnym konštruktorom, sealed class je však flexibilnejší, umožňuje vytváranie rôznych podtried s vlastnými konštruktormi a stavmi.