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 blokwhenpro instanci uzavřené třídy je kompletní (všechny případy jsou pokryty), pokud není uveden větevelse. 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.