Middle
Ako používať uzavreté triedy na modelovanie hierarchií v Kotlin?
sobes.tech AI
Odpoveď od AI
Zapečačené triedy (sealed classes) sa používajú na reprezentáciu obmedzených hierarchií dedičnosti, kde sú všetky možné podtriedy známe v čase kompilácie.
Hlavné vlastnosti:
- Všetky priame podtriedy musia byť v rovnakom súbore ako zapečatená trieda (pred Kotlin 1.5). Od Kotlin 1.5 môžu byť v akomkoľvek súbore tej istej kompilácie.
- Podtriedy zapečatenej triedy môžu byť bežné triedy, data triedy, deklarácie object alebo iné zapečatené triedy.
- Konštruktor zapečatenej triedy je predvolene súkromný; iné modifikátory (public, protected, internal) nie sú povolené.
- Umožňujú použiť úplnú (
exhaustive) analýzu v when výrazoch, čo zaručuje spracovanie všetkých možných variantov a odstraňuje potrebu else vetvy.
Príklad použitia na modelovanie stavu používateľského rozhrania:
sealed class UiState {
object Loading : UiState() // Stav načítania
data class Success(val data: String) : UiState() // Úspešné načítanie dát
data class Error(val message: String) : UiState() // Chyba
}
Použitie v when výraze:
fun handleUiState(state: UiState): String {
return when (state) {
UiState.Loading -> "Načítava sa dáta..."
is UiState.Success -> "Dáta úspešne načítané: ${state.data}"
is UiState.Error -> "Chyba: ${state.message}"
}
}
Výhody:
- Bezpečnosť typu: kompilátor kontroluje, či sú spracované všetky možné podtriedy.
- Čitateľnosť: jasne ukazuje, aké varianty dát alebo stavov môžu existovať.
- Pohodlie: zjednodušuje prácu s
whenvýrokmi.