Junior — Middle
Kokiose situacijose yra pageidautina naudoti sealed class vietoj enum Kotlin?
sobes.tech AI
Atsakymas iš AI
Kotlin'e sealed klasė yra pageidautina prieš enum, kai reikia aprašyti ribotą tipų rinkinį su skirtingomis duomenų struktūromis ir elgesiu, o ne tik konstantių rinkinį.
Skirtumai ir kada naudoti sealed klasę:
- Skirtingi duomenys variantams: Enum'e visi elementai yra tos pačios rūšies konstantai, o sealed klasė leidžia kiekvienai pogrupiui turėti savo savybes ir metodus.
- Paveldėjimas ir išplėtimas: Sealed klasė yra bazinė klasė su ribotu paveldėtojų skaičiumi, naudinga hierarchijų išreiškimui.
- Naudojimas in when: Kompiliatorius tikrina when pilnumą sealed klasės atveju, tai didina saugumą.
Pavyzdys sealed klasės:
sealed class Rezultatas {
data class Sėkmė(val duomenys: String) : Rezultatas()
data class Klaida(val klaida: Throwable) : Rezultatas()
object Krovimas : Rezultatas()
}
fun apdorotiRezultata(rezultatas: Rezultatas) {
when(rezultatas) {
is Rezultatas.Sėkmė -> println("Duomenys: ${rezultatas.duomenys}")
is Rezultatas.Klaida -> println("Klaida: ${rezultatas.klaida.message}")
Rezultatas.Krovimas -> println("Kraunasi...")
}
}
Jei jums reikia tik fiksuoto konstantių sąrašo be duomenų, enum yra paprastesnis ir efektyvesnis.