Sobes.tech
Junior — Middle

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.