Sobes.tech
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.