data class în Kotlin — ce este, sintaxa și particularitățile claselor de date

Autor: IT Sectr Publicat: 2026-06-20 Timp de citire: 10 min

data class în Kotlin este un tip special de clasă destinat exclusiv stocării datelor. Compilatorul generează automat metodele equals, hashCode, toString, copy și componentN pe baza proprietăților specificate în primary constructor. Conform documentației JetBrains (2026), data class permite reducerea volumului de cod boilerplate cu 50–70% față de echivalentele Java și stă la baza value-obiectelor în proiectele Kotlin.

Puncte principale

  • data — cuvânt cheie pentru declararea clasei de date în Kotlin
  • equals și hashCode — generate automat pe baza tuturor proprietăților primary constructor
  • copy — funcția de copiere superficială cu posibilitatea înlocuirii câmpurilor individuale
  • componentN — destructurarea data class în variabile separate
  • Primary constructor trebuie să conțină cel puțin un parametru val sau var

Ce este data class în Kotlin?

data class este o construcție sintactică Kotlin care generează automat metode standard pentru clasele al căror scop principal este stocarea datelor. La declararea data class, compilatorul creează implementări pentru equals, hashCode, toString, copy și componentN pe baza tuturor proprietăților din primary constructor.

Spre deosebire de clasele obișnuite în Java, unde dezvoltatorul trebuie să scrie manual gettere, settere, equals, hashCode și toString cu ajutorul IDE-ului sau al bibliotecilor precum Lombok, Kotlin oferă un mecanism încorporat. Acest lucru nu doar că scurtează codul, dar garantează și consistența — metodele automate corespund întotdeauna structurii curente a proprietăților.

Conform datelor JetBrains Kotlin Survey (2025), data class este utilizat în 78% din proiectele Kotlin, ceea ce îl face una dintre cele mai căutate capacități ale limbajului. Este deosebit de popular în arhitecturile cu DTO, modele de răspuns API și obiecte de stare în MVVM.

Sintaxa și capacitățile principale

data class se declară cu cuvântul cheie data înainte de class. Toate proprietățile care participă la metodele automate sunt specificate în primary constructor.

kotlin
data class User(
    val id: Int,
    val name: String,
    val email: String
)

O singură linie de cod înlocuiește zeci de linii de boilerplate în Java. Compilatorul generează equals, hashCode, toString, copy și component1–component3 pentru toate cele trei proprietăți.

Proprietăți în afara primary constructor

Metodele automate includ doar proprietățile din primary constructor. Dacă declari o proprietate în corpul clasei, aceasta nu participă la equals, hashCode, toString și copy.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice NU este inclus în equals/hashCode/copy
}

Limitările primary constructor

Primary constructor al data class trebuie să conțină cel puțin un parametru. Toți parametrii trebuie să fie marcați cu val sau var. Nu se pot utiliza modificatorii open, abstract, sealed sau inner pentru data class.

Metodele automate equals, hashCode și toString

equals și hashCode sunt generate pe baza valorilor tuturor proprietăților din primary constructor. Două instanțe ale data class sunt considerate egale dacă toate proprietățile lor corespunzătoare sunt egale.

equals pentru compararea valorilor

În Java, compararea implicită a obiectelor este compararea referințelor (==). Pentru compararea pe baza valorii este necesară suprascrierea equals. Kotlin data class face acest lucru automat, permițând utilizarea == pentru compararea structurală.

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

val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2)  // adevărat

toString pentru depanare

Metoda toString returnează o reprezentare lizibilă a obiectului cu numele și valorile tuturor proprietăților. Acest lucru simplifică semnificativ logarea și depanarea față de Java, unde implicit este afișat codul hash în format hexazecimal.

Conform Kotlin Documentation (2026), formatul toString pentru data class este: “User(id=1, name=John, email=john@example.com)”. La eliminarea proprietăților din primary constructor, toString se actualizează automat — riscul de desincronizare este exclus.

Funcția copy și destructurarea

copy — una dintre capacitățile cheie ale data class. Creează o copie superficială a obiectului cu posibilitatea de a modifica valorile proprietăților specificate.

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 este indispensabil în stilul funcțional și arhitecturile cu imutabilitate (immutability). În locul mutației obiectului existent, se creează o copie nouă cu câmpuri modificate, ceea ce face codul mai previzibil și mai sigur în scenariile multi-thread.

Destructurarea prin componentN

data class generează automat funcțiile component1, component2 și așa mai departe pentru fiecare proprietate în ordinea declarării lor. Acest lucru permite destructurarea obiectului în variabile.

kotlin
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)")  // “1: Alice (alice@example.com)”

Destructurarea funcționează și în lambde și bucle for-each, ceea ce face data class convenabil pentru lucrul cu colecții.

Limitări și recomandări

Prima limitare — data class nu suportă moștenirea de la un alt data class. Se poate moșteni doar de la clase obișnuite sau interfețe.

A doua — metodele automate includ doar proprietățile primary constructor. Proprietățile din corpul clasei sunt ignorate, ceea ce poate duce la un equals incorect dacă uitați acest lucru.

A treia — data class nu poate fi open, abstract, sealed sau inner. Este întotdeauna final.

A patra — pentru colecțiile din interiorul data class, copy efectuează o copiere superficială. Modificarea elementelor din colecția copiată se va reflecta în original.

Conform Kotlin Best Practices (2026), data class este optim pentru DTO, modele API, value objects și obiecte de stare. Pentru componente cu logică de business, se recomandă utilizarea claselor obișnuite.

Întrebări frecvente

Poate data class să moștenească un alt data class?

Nu, data class nu poate moșteni un alt data class. Cu toate acestea, poate moșteni o clasă obișnuită sau poate implementa interfețe.

Câte proprietăți trebuie să fie în primary constructor?

Cel puțin o proprietate. Numărul maxim nu este limitat, dar pentru destructurare sunt generate până la componentN.

Proprietățile din corpul clasei intră în equals?

Nu, metodele automate iau în considerare doar proprietățile din primary constructor. Proprietățile din corpul clasei nu participă la equals, hashCode, toString și copy.

Se pot suprascrie manual metodele automate?

Da, puteți suprascrie equals, hashCode sau toString în corpul data class. În acest caz, compilatorul nu generează propria implementare.

Cu ce se deosebește data class de o clasă obișnuită?

data class generează automat equals, hashCode, toString, copy și componentN. O clasă obișnuită nu oferă aceste metode fără implementare manuală.

Concluzii

  • data class — construcție sintactică Kotlin pentru stocarea datelor cu auto-generare a metodelor
  • equals și hashCode — comparare structurală pe baza proprietăților primary constructor
  • toString — reprezentare lizibilă a obiectului pentru depanare și logare
  • copy — copiere superficială cu înlocuirea câmpurilor individuale prin argumente denumite
  • componentN — destructurarea obiectelor în variabile pentru lucrul convenabil cu colecții
  • Limitări — final implicit, cel puțin o proprietate, fără moștenire data->data
  • Utilizare — DTO, modele API, value objects, stare în MVVM

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și