Sobes.tech
Middle

Na co se v Kotlinu používají datové třídy a sealed třídy?

sobes.tech AI

Odpověď od AI

Datové třídy usnadňují vytváření tříd určených pouze pro ukládání dat. Překladač pro ně automaticky generuje:

  • equals()
  • hashCode()
  • toString()
  • copy()
  • componentN() pro destrukturalizaci
datová třída User(val jméno: String, val věk: Int)

// Použití
val user = User("Alice", 30)
println(user) // Zobrazí User(jméno=Alice, věk=30)
val user2 = user.copy(věk = 31)
val (jméno, věk) = user // Destrukturalizace

Uzavřené třídy (sealed) představují omezenou hierarchii tříd, kde jsou všechny možné podtřídy známy při kompilaci. To umožňuje jejich použití ve výrazech when bez bloku else, což zaručuje úplnou kontrolu všech možností.

uzavřená třída Result {
    datová třída Success(val data: String) : Result()
    datová třída Error(val zpráva: String) : Result()
    objekt Loading : Result() // Objekt, protože nemá parametry
}

fun handleResult(result: Result) {
    when (result) {
        is Result.Success -> println("Úspěch: ${result.data}")
        is Result.Error -> println("Chyba: ${result.zpráva}")
        Result.Loading -> println("Načítání...")
    }
}

Porovnání:

Vlastnost Datová třída Uzavřená třída
Účel Ukládání dat Omezená hierarchie tříd
Schopnosti Automatické generování metod Kompletní kontrola v when
Podtřídy Bez specifických omezení Musí být ve stejném souboru nebo modulu
Použití Modely dat, DTO Reprezentace stavů, událostí, variant