data class Kotlinban egy speciális osztálytípus, amely kizárólag adatok tárolására szolgál. A compiler automatikusan generálja az equals, hashCode, toString, copy és componentN metódusokat a primary constructorban megadott tulajdonságok alapján. A JetBrains dokumentáció (2026) szerint a data class lehetővé teszi a boilerplate kód mennyiségének 50–70%-os csökkentését a Java megfelelőkhöz képest, és alapját képezi a value-objektumoknak Kotlin projektekben.
Főbb pontok
data class egy Kotlin szintaktikai konstrukció, amely automatikusan generál szabványos metódusokat azon osztályok számára, amelyek fő célja adatok tárolása. A data class deklarálásakor a compiler létrehozza az equals, hashCode, toString, copy és componentN implementációkat a primary constructor összes tulajdonsága alapján.
Ellentétben a Java szokásos osztályaival, ahol a fejlesztőnek manuálisan kell gettereket, settereket, equals, hashCode és toString metódusokat írnia IDE vagy Lombok könyvtár segítségével, a Kotlin beépített mechanizmust kínál. Ez nemcsak lerövidíti a kódot, hanem konzisztenciát is garantál — az automatikus metódusok mindig megfelelnek a tulajdonságok aktuális szerkezetének.
A JetBrains Kotlin Survey (2025) adatai szerint a data class a Kotlin projektek 78%-ában használatos, ami a nyelv egyik legkeresettebb képességévé teszi. Különösen népszerű a DTO-kkal, API-válasz modellekkel és MVVM-beli állapotobjektumokkal rendelkező architektúrákban.
data class deklarálása a class előtti data kulcsszóval történik. Az automatikus metódusokban részt vevő összes tulajdonság a primary constructorban van megadva.
data class User(
val id: Int,
val name: String,
val email: String
)
Egy sornyi kód tucatnyi boilerplate sort helyettesít Java-ban. A compiler generálja az equals, hashCode, toString, copy és component1–component3 metódusokat mindhárom tulajdonsághoz.
Az automatikus metódusok csak a primary constructor tulajdonságait foglalják magukban. Ha egy tulajdonságot az osztály testében deklarálsz, az nem vesz részt az equals, hashCode, toString és copy metódusokban.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice NINCS benne az equals/hashCode/copy-ban
}
A data class primary constructornak legalább egy paramétert kell tartalmaznia. Minden paramétert val vagy var jelöléssel kell ellátni. A data class esetében nem használhatók az open, abstract, sealed vagy inner módosítók.
Az equals és hashCode a primary constructor összes tulajdonságának értékei alapján generálódik. Két data class példány akkor tekinthető egyenlőnek, ha az összes megfelelő tulajdonságuk egyenlő.
Java-ban az objektumok alapértelmezett összehasonlítása referenciák összehasonlítása (==). Az érték alapú összehasonlításhoz az equals felülírása szükséges. A Kotlin data class ezt automatikusan megteszi, lehetővé téve a == használatát strukturális összehasonlításhoz.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // igaz
A toString metódus az objektum olvasható reprezentációját adja vissza az összes tulajdonság nevével és értékével. Ez jelentősen leegyszerűsíti a naplózást és hibakeresést a Java-hoz képest, ahol alapértelmezés szerint a hash-kód hexadecimális formátumban jelenik meg.
A Kotlin Documentation (2026) szerint a data class toString formátuma: „User(id=1, name=John, email=john@example.com)”. Amikor tulajdonságokat távolítanak el a primary constructorból, a toString automatikusan frissül — a deszinkronizáció kockázata kizárt.
copy — a data class egyik kulcsfontosságú képessége. Az objektum sekély másolatát hozza létre a megadott tulajdonságok értékeinek megváltoztatásának lehetőségével.
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 nélkülözhetetlen a funkcionális stílusban és a megváltoztathatatlanságon (immutability) alapuló architektúrákban. A meglévő objektum mutációja helyett egy új másolat jön létre módosított mezőkkel, ami kiszámíthatóbbá és többszálú forgatókönyvekben biztonságosabbá teszi a kódot.
A data class automatikusan generálja a component1, component2 és így tovább függvényeket minden tulajdonsághoz a deklarálás sorrendjében. Ez lehetővé teszi az objektum változókra történő destrukturálását.
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)") // „1: Alice (alice@example.com)”
A destrukturálás lambda kifejezésekben és for-each ciklusokban is működik, ami a data class-t kényelmessé teszi a kollekciókkal való munkához.
Első korlátozás — a data class nem támogatja az öröklődést másik data class-tól. Csak szokásos osztályokból vagy interfészekből örökölhet.
Második — az automatikus metódusok csak a primary constructor tulajdonságait foglalják magukban. Az osztály testében lévő tulajdonságok figyelmen kívül maradnak, ami hibás equals-hoz vezethet, ha elfelejti ezt.
Harmadik — a data class nem lehet open, abstract, sealed vagy inner. Mindig final.
Negyedik — a data classon belüli kollekciók esetében a copy sekély másolást végez. A másolt kollekció elemeinek megváltoztatása hatással lesz az eredetire.
A Kotlin Best Practices (2026) szerint a data class optimális DTO-khoz, API-modellekhez, value objectekhez és állapotobjektumokhoz. Az üzleti logikával rendelkező összetevőkhöz szokásos osztályok használata javasolt.
Gyakran ismételt kérdések
Nem, a data class nem örökölhet másik data class-t. Azonban örökölhet szokásos osztályból vagy implementálhat interfészeket.
Legalább egy tulajdonság. A maximális szám nincs korlátozva, de a destrukturáláshoz componentN-ig generálódik.
Nem, az automatikus metódusok csak a primary constructor tulajdonságait veszik figyelembe. Az osztály testéből származó tulajdonságok nem vesznek részt az equals, hashCode, toString és copy metódusokban.
Igen, ön felülírhatja az equals, hashCode vagy toString metódusokat a data class testében. Ebben az esetben a compiler nem generál saját implementációt.
A data class automatikusan generál equals, hashCode, toString, copy és componentN metódusokat. A szokásos osztály manuális implementáció nélkül nem biztosítja ezeket a metódusokat.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is