Sobes.tech
Junior — Middle

V akých prípadoch je vhodnejšie použiť sealed class namiesto enum v Kotlin?

sobes.tech AI

Odpoveď od AI

V Kotlinu je sealed class preferovaná pred enum, keď je potrebné opísať obmedzený súbor typov s rôznymi štruktúrami dát a správaním, nie len sadu konštánt.

Rozdiely a kedy použiť sealed class:

  • Rôzne dáta pri variantoch: V enum sú všetky prvky konštantami rovnakého typu, zatiaľ čo sealed class umožňuje každej podtriede mať vlastné vlastnosti a metódy.
  • Dedičnosť a rozšíriteľnosť: Sealed class je základná trieda s obmedzeným počtom dedičov, čo je užitočné na vyjadrenie hierarchií.
  • Použitie v when: Kompilátor kontroluje úplnosť when pre sealed class, čím zvyšuje bezpečnosť.

Príklad sealed class:

sealed class Výsledok {
    data class Úspech(val dáta: String) : Výsledok()
    data class Chyba(val chyba: Throwable) : Výsledok()
    object Načítanie : Výsledok()
}

fun spracujVýsledok(výsledok: Výsledok) {
    when(výsledok) {
        is Výsledok.Úspech -> println("Dáta: ${výsledok.dáta}")
        is Výsledok.Chyba -> println("Chyba: ${výsledok.chyba.message}")
        Výsledok.Načítanie -> println("Načítam...")
    }
}

Ak potrebujete len zoznam pevných konštánt bez dát, enum bude jednoduchší a efektívnejší.