Sobes.tech
Middle

Poznáš sealed triedy a v čom je ich špecifikum?

sobes.tech AI

Odpoveď od AI

Áno, poznám.

Špeciálnosť sealed tried je, že umožňujú obmedziť hierarchiu dedičnosti. Všetky priame podtypy sealed triedy musia byť deklarované v rovnakom súbore. To zabezpečuje, že kompilátor pozná všetky možné podtypy, čo je užitočné pri kontrole úplnosti v výrazoch when.

Príklad:

sealed class Result {
    data class Success(val message: String) : Result()
    data class Error(val code: Int, val description: String) : Result()
    object Loading : Result() // Singleton pre stav načítania
}

fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Úspech: ${result.message}")
        is Result.Error -> println("Chyba ${result.code}: ${result.description}")
        Result.Loading -> println("Načítava sa...")
        // Nie je potrebné else, pretože kompilátor pozná všetky možnosti
    }
}

Výhody:

  • Bezpečnosť: Zaručuje úplnosť výrazov when bez potreby else.
  • Prehľadnosť: Jasne označuje obmedzený počet možných stavov alebo podtypov.
  • Kontrola: Zabraňuje nekontrolovanej dedičnosti zvonku.

Rozdiel od enum class: sealed triedy môžu mať rôzne dátové typy pre každý podtyp (ako Success a Error v príklade), zatiaľ čo prvky enum class sú statické a môžu mať iba určité vlastnosti, spoločné pre všetky. sealed triedy môžu tiež obsahovať inštancie-objekty (Loading).