Sobes.tech
Junior — Middle

V jakých případech je vhodnější použít sealed class místo enum v Kotlinu?

sobes.tech AI

Odpověď od AI

V Kotlinu je preferovaná sealed třída před enumem, když je potřeba popsat omezenou množinu typů s různými datovými strukturami a chováním, nikoli pouze sadu konstant.

Rozdíly a kdy použít sealed třídu:

  • Různá data u variant: V enum jsou všechny prvky konstantami stejného typu, zatímco sealed třída umožňuje každé podtřídě mít své vlastní vlastnosti a metody.
  • Dědičnost a rozšiřitelnost: Sealed třída je základní třída s omezeným počtem dědiců, což je užitečné pro vyjádření hierarchií.
  • Použití v when: Kompilátor kontroluje úplnost when pro sealed třídu, což zvyšuje bezpečnost.

Příklad sealed třídy:

sealed class Výsledek {
    data class Úspěch(val data: String) : Výsledek()
    data class Chyba(val error: Throwable) : Výsledek()
    object Načítání : Výsledek()
}

fun zpracujVýsledek(výsledek: Výsledek) {
    when(výsledek) {
        is Výsledek.Úspěch -> println("Data: ${výsledek.data}")
        is Výsledek.Chyba -> println("Chyba: ${výsledek.error.message}")
        Výsledek.Načítání -> println("Načítám...")
    }
}

Pokud potřebujete pouze seznam pevných konstant bez dat, enum je jednodušší a efektivnější.