Middle
Jak používat uzavřené třídy k modelování hierarchií v Kotlinu?
sobes.tech AI
Odpověď od AI
Uzavřené třídy (sealed classes) se používají k reprezentaci omezených hierarchií dědičnosti, kde jsou všechny možné podtřídy známy v době kompilace.
Hlavní vlastnosti:
- Všechny přímé podtřídy musí být ve stejném souboru jako uzavřená třída (před Kotlinem 1.5). Od Kotlinu 1.5 mohou být v libovolném souboru stejné kompilace.
- Podtřídy uzavřené třídy mohou být běžné třídy, data třídy, deklarace object nebo jiné uzavřené třídy.
- Konstruktor uzavřené třídy je implicitně soukromý; jiné modifikátory (public, protected, internal) nejsou povoleny.
- Umožňují použití úplné (
exhaustive) analýzy v when výrazech, což zaručuje zpracování všech možných variant a odstraňuje potřebu else větve.
Příklad použití pro modelování stavu uživatelského rozhraní:
sealed class UiState {
object Loading : UiState() // Stav načítání
data class Success(val data: String) : UiState() // Úspěšné načtení dat
data class Error(val message: String) : UiState() // Chyba
}
Použití v when výrazu:
fun handleUiState(state: UiState): String {
return when (state) {
UiState.Loading -> "Načítání dat..."
is UiState.Success -> "Data úspěšně načtena: ${state.data}"
is UiState.Error -> "Chyba: ${state.message}"
}
}
Výhody:
- Bezpečnost typu: kompilátor kontroluje, že jsou ošetřeny všechny možné podtřídy.
- Čitelnost: jasně ukazuje, jaké varianty dat nebo stavů mohou existovat.
- Pohodlí: zjednodušuje práci s when výrazy.