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 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.
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.
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.
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.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice NU este inclus în equals/hashCode/copy
}
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.
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.
Î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ă.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // adevărat
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.
copy — una dintre capacitățile cheie ale data class. Creează o copie superficială a obiectului cu posibilitatea de a modifica valorile proprietăților specificate.
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.
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.
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.
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
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.
Cel puțin o proprietate. Numărul maxim nu este limitat, dar pentru destructurare sunt generate până la componentN.
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.
Da, puteți suprascrie equals, hashCode sau toString în corpul data class. În acest caz, compilatorul nu generează propria implementare.
data class generează automat equals, hashCode, toString, copy și componentN. O clasă obișnuită nu oferă aceste metode fără implementare manuală.
Concluzii
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.
Citiți și