data class Kotlinban — mi ez, szintaxis és az adatosztályok jellemzői

Szerző: IT Sectr Megjelenés: 2026-06-20 Olvasási idő: 10 perc

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 — kulcsszó az adatosztály deklarálásához Kotlinban
  • equals és hashCode — automatikusan generálódik a primary constructor összes tulajdonsága alapján
  • copy — sekély másolás funkció egyes mezők cseréjének lehetőségével
  • componentN — a data class destrukturálása külön változókra
  • Primary constructornak tartalmaznia kell legalább egy val vagy var paramétert

Mi az a data class Kotlinban?

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.

Szintaxis és főbb lehetőségek

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.

kotlin
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.

Tulajdonságok a primary constructoron kívül

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.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice NINCS benne az equals/hashCode/copy-ban
}

A primary constructor korlátozásai

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.

Automatikus equals, hashCode és toString metódusok

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ő.

equals az érték-összehasonlításhoz

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.

kotlin
data class Address(
    val city: String,
    val street: String
)

val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2)  // igaz

toString hibakereséshez

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.

A copy függvény és destrukturálás

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.

kotlin
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.

Destrukturálás componentN segítségével

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.

kotlin
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.

Korlátozások és javaslatok

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

Örökölhet-e a data class egy másik data class-t?

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.

Hány tulajdonságnak kell lennie a primary constructorban?

Legalább egy tulajdonság. A maximális szám nincs korlátozva, de a destrukturáláshoz componentN-ig generálódik.

Beleszámítanak-e az equals-ba az osztály testében lévő tulajdonságok?

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.

Felülírhatók-e manuálisan az automatikus metódusok?

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.

Miben különbözik a data class a szokásos osztálytól?

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

  • data class — Kotlin szintaktikai konstrukció adatok tárolására metódusok automatikus generálásával
  • equals és hashCode — strukturális összehasonlítás a primary constructor tulajdonságai alapján
  • toString — az objektum olvasható reprezentációja hibakereséshez és naplózáshoz
  • copy — sekély másolás egyes mezők cseréjével név szerinti argumentumok segítségével
  • componentN — objektumok destrukturálása változókra a kollekciókkal való kényelmes munkához
  • Korlátozások — alapértelmezés szerint final, legalább egy tulajdonság, nincs data->data öröklés
  • Alkalmazás — DTO, API-modellek, value objectek, állapot MVVM-ben

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.

Projekt megbeszélése

Olvassa el is