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 |