Sobes.tech
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, kad when blokas, skirtas sealed klasės egzemplioriui, yra visapusiškas (visi atvejai yra padengti), jei nėra nurodyta else š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.
  • when iš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.