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ší.