Sobes.tech
Middle

Co jsou to sealed třídy a jaký je jejich účel?

sobes.tech AI

Odpověď od AI

Uzavřené třídy představují omezené hierarchie tříd. Používají se k reprezentaci omezeného souboru možných stavů nebo hodnot.

Hlavní vlastnosti a účel:

  • Omezená hierarchie: Potomci uzavřené třídy musí být deklarováni ve stejném souboru nebo uvnitř uzavřené třídy před Kotlinem 1.5. Od verze 1.5 je toto omezení zmírněno: potomci mohou být v libovolném souboru stejného balíčku.
  • Enum třídy se stavem: Na rozdíl od enum tříd může každý potomek uzavřené třídy mít vlastní stav a chování.
  • Kompletní when: Kompilátor zajišťuje, že blok when pro instanci uzavřené třídy je kompletní (všechny případy jsou pokryty), pokud není uveden větev else. To snižuje pravděpodobnost chyb při běhu.

Pří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ý příklad
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Zpracování úspěšného výsledku
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Zpracování chyby
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Zpracování stavu načítání
            println("Loading data...")
        }
        // Není potřeba větev else, protože všechny podtřídy
        // Result jsou pokryty kompilátorem
    }
}

Účel:

  • Bezpečná reprezentace stavů: Spolehlivě reprezentovat konečný počet možných stavů, například výsledek síťového požadavku (Success, Error, Loading).
  • Zlepšení čitelnosti kódu: Umožňuje, aby byl kód jasnější při zpracování různých případů.
  • Zvýšení spolehlivosti výrazů when: Kompilátor pomáhá zabránit nezpracovaným případům.
  • Nahrazení enum tříd se stavem: Když je třeba spojit data s konkrétními "variantami" výčtu.

Tímto způsobem poskytují uzavřené třídy flexibilní způsob modelování konečných množin hodnot s možností ukládání specifických dat pro každou hodnotu, přičemž zajišťují bezpečnost a jasnost při zpracování těchto hodnot v výrazech when.