Pověz mi o datových třídách a uzavřených třídách v Kotlinu.
sobes.tech AI
Odpověď od AI
Datové třídy v Kotlinu se používají pro ukládání dat. Automaticky generují užitečné metody jako equals(), hashCode(), toString(), copy() a také komponenty pro destrukturalizaci.
// Příklad datové třídy
data class User(val name: String, val age: Int)
Sealed třídy se používají k reprezentaci omezené hierarchie tříd. Všechny podtřídy musí být definovány ve stejném souboru jako sealed třída (v Kotlinu 1.5+ je toto omezení zmírněno). To umožňuje kompilátoru zajistit úplnost při kontrole podtříd, například v výrazu when.
// Příklad sealed třídy
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
// Příklad použití sealed třídy v `when`
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Úspěch: ${result.data}")
is Result.Error -> println("Chyba: ${result.message}")
Result.Loading -> println("Načítání...")
}
}
Hlavní rozdíly:
- Účel: datové třídy - ukládání dat, sealed třídy - omezení hierarchie tříd.
- Generované metody: datové třídy generují standardní metody pro data, sealed třídy - ne.
- Omezení podtříd: sealed třídy kladou omezení na deklaraci podtříd, datové třídy - ne.
- Úplnost v
when: Kotlin kompilátor může zkontrolovat úplnost podtříd sealed třídy vwhenbez větveelse.
Obě třídy, sealed i datové, mohou být abstraktní, avšak datové třídy nemohou být open (protože jsou implicitně final) a nemohou přímo implementovat open metody (pouze přes rozhraní nebo abstraktní třídy). Sealed třídy jsou implicitně abstraktní a jejich konstruktory jsou soukromé.