Sobes.tech
Junior — Middle

Milyen esetekben érdemes inkább sealed class-t használni, mint enum-ot Kotlinban?

sobes.tech MI

Válasz az MI-től

A sealed osztály Kotlinban előnyösebb az enumnál, amikor korlátozott számú típus leírására van szükség különböző adatszerkezetekkel és viselkedéssel, nem csupán konstansok halmazaként.

Különbségek és mikor használjunk sealed osztályt:

  • Különböző adatok a variánsoknál: Az enum összes eleme ugyanazon típusú konstans, míg a sealed osztály lehetővé teszi, hogy minden alosztály saját tulajdonságokkal és metódusokkal rendelkezzen.
  • Öröklődés és bővíthetőség: A sealed osztály egy alap osztály, korlátozott számú örökössel, ami hasznos hierarchiák kifejezésére.
  • When használata: A fordító ellenőrzi a when kifejezés teljességét a sealed osztály esetében, növelve a biztonságot.

Példa sealed osztályra:

sealed class Eredmeny {
    data class Siker(val adatok: String) : Eredmeny()
    data class Hiba(val hiba: Throwable) : Eredmeny()
    object Betoltes : Eredmeny()
}

fun kezeldEredmeny(eredmeny: Eredmeny) {
    when(eredmeny) {
        is Eredmeny.Siker -> println("Adatok: ${eredmeny.adatok}")
        is Eredmeny.Hiba -> println("Hiba: ${eredmeny.hiba.message}")
        Eredmeny.Betoltes -> println("Betöltés...")
    }
}

Ha csak fix konstansok listájára van szükség adat nélkül, az enum egyszerűbb és hatékonyabb.