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 blokwhenpre inštanciu sealed triedy je úplný (všetky prípady sú pokryté), ak nie je uvedená vetvaelse. 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
whenvý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.