Kuo skiriasi sealed class naudojimas nuo enum naudojimo jų konstruktorių ir galimybės juos kurti požiūriu?
sobes.tech AI
Atsakymas iš AI
Kotlin (ir Java) enum reprezentuoja fiksuotų konstantų rinkinį. Kiekvienas enum turi ribotą egzempliorių skaičių, apibrėžtą pačioje deklaracijoje. Enum konstruktoriai visada yra privačios, ir naujų egzempliorių sukurti negalima — tik tuos, kurie yra deklaruoti.
Sealed class (uždarytas klasė) yra abstrakti klasė su ribotu paveldėtojų skaičiumi, kurie deklaruojami toje pačioje faile. Skirtingai nuo enum, sealed class leidžia kurti įvairių tipų su skirtinga struktūra ir būsena. Sealed class konstruktoriai gali būti atviri arba uždaryti, ir galima kurti naujus paveldėtojų egzempliorius, ne tik fiksuotas konstantas.
Pavyzdys:
// Privatus konstruktorius ir fiksuoti egzemplioriai su enum
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Sealed class su skirtingais paveldėtojais ir konstruktoriais
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
Šiuo būdu, enum yra ribojamas iki fiksuoto egzempliorių skaičiaus su privačiu konstruktoriu, sealed class — lankstesnė, leidžianti kurti skirtingas pogrupius su savo konstruktoriais ir būsena.