Sobes.tech
Middle

Čo sú sealed triedy a aký je ich účel?

sobes.tech AI

Odpoveď od AI

Sealed triedy predstavujú obmedzené hierarchie tried. Používajú sa na reprezentáciu obmedzeného súboru možných stavov alebo hodnôt.

Hlavné vlastnosti a účel:

  • Obmedzená hierarchia: Dedítry sealed tried musia byť deklarované v rovnakom súbore alebo vnútri sealed triedy pred Kotlin 1.5. Od verzie 1.5 je toto obmedzenie uvoľnené: dedičia môžu byť v akomkoľvek súbore toho istého balíka.
  • Enum triedy so stavom: Na rozdiel od enum tried, každý dedič sealed triedy môže mať vlastný stav a správanie.
  • Kompletný when: Kompilátor zabezpečuje, že blok when pre inštanciu sealed triedy je úplný (všetky prípady sú pokryté), ak nie je uvedená vetva else. To znižuje pravdepodobnosť chýb počas behu.

Príklad:

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>() // Jednotný inštancia
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Spracovanie úspešného výsledku
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Spracovanie chyby
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Spracovanie stavu načítavania
            println("Loading data...")
        }
        // Vetva else nie je potrebná, pretože všetky podtriedy
        // Result sú spracované kompilátorom
    }
}

Účel:

  • Bezpečné zobrazenie stavov: spoľahlivo zobrazuje konečný počet možných stavov, napríklad výsledok sieťového dopytu (Success, Error, Loading).
  • Zlepšenie čitateľnosti kódu: robí kód jasnejším pri spracovaní rôznych prípadov.
  • Zvýšenie spoľahlivosti when výrazov: kompilátor pomáha predchádzať nezachyteným prípadom.
  • Nahradenie enum tried so stavom: keď je potrebné spojiť údaje s konkrétnymi "variantami" výčtu.

Takže sealed triedy poskytujú flexibilný spôsob modelovania konečných množín hodnôt s možnosťou uloženia špecifických údajov pre každú hodnotu, pričom zabezpečujú bezpečnosť a jasnosť pri spracovaní týchto hodnôt v when výrazoch.