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.