Middle
Kas yra sealed klasės ir koks jų tikslas?
sobes.tech AI
Atsakymas iš AI
Sealed klasės yra ribotos paveldėjimo hierarchijos. Jos naudojamos ribotam galimų būsenų ar reikšmių rinkiniui atvaizduoti.
Pagrindinės savybės ir tikslas:
- Ribota hierarchija: Sealed klasės paveldėtojai turi būti deklaruojami toje pačioje faile arba viduje sealed klasės iki Kotlin 1.5. Nuo versijos 1.5 ši apribojimas yra sumažintas: paveldėtojai gali būti bet kuriame to paties paketo faile.
- Būsenomis turinčios enum klasės: Skirtingai nuo enum klasių, kiekvienas sealed klasės paveldėtojas gali turėti savo būseną ir elgesį.
- Visapusiškas
when: Kompiliatorius užtikrina, kadwhenblokas, skirtas sealed klasės egzemplioriui, yra visapusiškas (visi atvejai yra padengti), jei nėra nurodytaelsešaka.
Pavyzdys:
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>() // Vienintelis egzempliorius
}
fun processResult(result: Result<String>) {
when (result) {
is Result.Success -> {
// Sėkmingo rezultato apdorojimas
println("Data: ${result.data}")
}
is Result.Error -> {
// Klaidos apdorojimas
println("Error: ${result.exception.message}")
}
Result.Loading -> {
// Įkėlimo būsenos apdorojimas
println("Loading data...")
}
// `else` šaka nereikalinga, nes visi pogrupiai
// Result apdoroti kompiiliatoriumi
}
}
Paskirtis:
- Saugus būsenų atvaizdavimas: patikimai atvaizduoja galutinį galimų būsenų skaičių, pavyzdžiui, tinklo užklausos rezultatą (
Success,Error,Loading). - Kodo skaitomumo gerinimas: daro kodą aiškesnį apdorojant įvairius atvejus.
whenišraiškų patikimumo didinimas: kompiliatorius padeda išvengti nepaliestų atvejų.- Vietoj enum klasės su būsenomis: kai reikia susieti duomenis su konkrečiais "variantais".
Taigi, sealed klasės suteikia lankstų būdą modeliuoti galutinius reikšmių rinkinius su galimybe saugoti specifinius duomenis kiekvienai reikšmei, tuo pačiu užtikrinant saugumą ir aiškumą jų apdorojime when išraiškose.