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
whenbez potrebyelse. - 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).