data class v Kotlinu je speciální typ třídy určený výhradně pro ukládání dat. Kompilátor automaticky generuje metody equals, hashCode, toString, copy a componentN na základě vlastností uvedených v primary constructor. Podle dokumentace JetBrains (2026) umožňuje data class snížit objem boilerplate kódu o 50–70% oproti ekvivalentům v Javě a je základem pro value-objekty v Kotlin projektech.
Hlavní body
data class je syntaktická konstrukce Kotlinu, která automaticky generuje standardní metody pro třídy, jejichž hlavním účelem je ukládání dat. Při deklaraci data class kompilátor vytváří implementace equals, hashCode, toString, copy a componentN na základě všech vlastností z primary constructor.
Na rozdíl od běžných tříd v Javě, kde vývojář musí ručně psát gettery, settery, equals, hashCode a toString pomocí IDE nebo knihoven jako Lombok, Kotlin poskytuje vestavěný mechanismus. To nejen zkracuje kód, ale také zaručuje konzistenci — automatické metody vždy odpovídají aktuální struktuře vlastností.
Podle údajů JetBrains Kotlin Survey (2025) se data class používá v 78% Kotlin projektů, což z něj činí jednu z nejžádanějších funkcí jazyka. Je obzvláště populární v architekturách s DTO, modely odpovědí API a stavovými objekty v MVVM.
data class se deklaruje s klíčovým slovem data před class. Všechny vlastnosti účastnící se automatických metod jsou uvedeny v primary constructor.
data class User(
val id: Int,
val name: String,
val email: String
)
Jeden řádek kódu nahrazuje desítky řádků boilerplate v Javě. Kompilátor generuje equals, hashCode, toString, copy a component1–component3 pro všechny tři vlastnosti.
Automatické metody zahrnují pouze vlastnosti z primary constructor. Pokud deklarujete vlastnost v těle třídy, neúčastní se equals, hashCode, toString a copy.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice NENÍ zahrnut v equals/hashCode/copy
}
Primary constructor data class musí obsahovat alespoň jeden parametr. Všechny parametry musí být označeny val nebo var. Pro data class nelze použít modifikátory open, abstract, sealed nebo inner.
equals a hashCode jsou generovány na základě hodnot všech vlastností z primary constructor. Dvě instance data class jsou považovány za stejné, pokud jsou všechny jejich odpovídající vlastnosti stejné.
V Javě je výchozí porovnání objektů porovnání referencí (==). Pro porovnání podle hodnoty je vyžadováno přepsání equals. Kotlin data class to dělá automaticky, což umožňuje použít == pro strukturální porovnání.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // pravda
Metoda toString vrací čitelnou reprezentaci objektu s názvy a hodnotami všech vlastností. To výrazně zjednodušuje logování a ladění ve srovnání s Javou, kde se ve výchozím nastavení zobrazuje hash kód v hexadecimálním formátu.
Podle Kotlin Documentation (2026) má toString data class formát: „User(id=1, name=John, email=john@example.com)”. Při odstranění vlastností z primary constructor se toString automaticky aktualizuje — riziko desynchronizace je vyloučeno.
copy — jedna z klíčových možností data class. Vytváří mělkou kopii objektu s možností změny hodnot zadaných vlastností.
data class Order(
val id: Long,
val status: String,
val amount: Double
)
val order = Order(1L, "Pending", 299.99)
val updatedOrder = order.copy(status = "Confirmed")
// updatedOrder.id = 1L, amount = 299.99, status = „Confirmed”
copy je nepostradatelný ve funkcionálním stylu a architekturách s neměnností (immutability). Namísto mutace existujícího objektu se vytváří nová kopie se změněnými poli, což činí kód předvídatelnějším a bezpečnějším v vícevláknových scénářích.
data class automaticky generuje funkce component1, component2 a tak dále pro každou vlastnost v pořadí deklarace. To umožňuje destrukturalizaci objektu na proměnné.
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)") // „1: Alice (alice@example.com)”
Destrukturalizace funguje také v lambdách a cyklech for-each, což činí data class vhodným pro práci s kolekcemi.
První omezení — data class nepodporuje dědičnost od jiného data class. Dědit lze pouze od běžných tříd nebo rozhraní.
Druhé — automatické metody zahrnují pouze vlastnosti primary constructor. Vlastnosti v těle třídy jsou ignorovány, což může vést k nesprávnému equals, pokud na to zapomenete.
Třetí — data class nemůže být open, abstract, sealed nebo inner. Je vždy final.
Čtvrté — pro kolekce uvnitř data class provádí copy mělké kopírování. Změna prvků uvnitř zkopírované kolekce se projeví v originálu.
Podle Kotlin Best Practices (2026) je data class optimální pro DTO, API modely, value objects a stavové objekty. Pro komponenty s obchodní logikou se doporučuje používat běžné třídy.
Často kladené otázky
Ne, data class nemůže dědit jiný data class. Může však dědit běžnou třídu nebo implementovat rozhraní.
Alespoň jedna vlastnost. Maximální počet není omezen, ale pro destrukturalizaci se generuje do componentN.
Ne, automatické metody berou v úvahu pouze vlastnosti z primary constructor. Vlastnosti z těla třídy se neúčastní equals, hashCode, toString a copy.
Ano, můžete přepsat equals, hashCode nebo toString v těle data class. V tom případě kompilátor negeneruje vlastní implementaci.
data class automaticky generuje equals, hashCode, toString, copy a componentN. Běžná třída tyto metody bez ruční implementace neposkytuje.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také