data class in Kotlin — wat het is, syntax en kenmerken van dataklassen

Auteur: IT Sectr Gepubliceerd: 2026-06-20 Leestijd: 10 min

data class in Kotlin is een speciaal type klasse dat uitsluitend bedoeld is voor het opslaan van gegevens. De compiler genereert automatisch de equals, hashCode, toString, copy en componentN methoden op basis van de eigenschappen die in de primary constructor zijn opgegeven. Volgens de JetBrains-documentatie (2026) kan data class de hoeveelheid boilerplate-code met 50–70% verminderen in vergelijking met Java-equivalenten en vormt het de basis voor value-objecten in Kotlin-projecten.

Belangrijkste punten

  • data — sleutelwoord voor het declareren van een dataklasse in Kotlin
  • equals en hashCode — automatisch gegenereerd op basis van alle eigenschappen van de primary constructor
  • copy — functie voor ondiepe kopiëren met de mogelijkheid om afzonderlijke velden te vervangen
  • componentN — destructurering van data class in afzonderlijke variabelen
  • Primary constructor moet ten minste één val of var parameter bevatten

Wat is een data class in Kotlin?

data class is een syntaxconstructie in Kotlin die automatisch standaardmethoden genereert voor klassen waarvan het hoofddoel het opslaan van gegevens is. Bij het declareren van een data class maakt de compiler implementaties van equals, hashCode, toString, copy en componentN op basis van alle eigenschappen uit de primary constructor.

In tegenstelling tot gewone klassen in Java, waar de ontwikkelaar handmatig getters, setters, equals, hashCode en toString moet schrijven met behulp van IDE of bibliotheken zoals Lombok, biedt Kotlin een ingebouwd mechanisme. Dit verkort niet alleen de code, maar garandeert ook consistentie — automatische methoden komen altijd overeen met de huidige eigenschappenstructuur.

Volgens gegevens van JetBrains Kotlin Survey (2025) wordt data class gebruikt in 78% van de Kotlin-projecten, wat het een van de meest gevraagde functies van de taal maakt. Het is vooral populair in architecturen met DTO's, API-responsmodellen en state-objecten in MVVM.

Syntax en belangrijkste mogelijkheden

data class wordt gedeclareerd met het sleutelwoord data voor class. Alle eigenschappen die deelnemen aan de automatische methoden worden gespecificeerd in de primary constructor.

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

Eén regel code vervangt tientallen regels boilerplate in Java. De compiler genereert equals, hashCode, toString, copy en component1–component3 voor alle drie eigenschappen.

Eigenschappen buiten de primary constructor

Automatische methoden omvatten alleen eigenschappen uit de primary constructor. Als je een eigenschap in de klassebody declareert, neemt deze niet deel aan equals, hashCode, toString en copy.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice is NIET opgenomen in equals/hashCode/copy
}

Beperkingen van de primary constructor

De primary constructor van een data class moet ten minste één parameter bevatten. Alle parameters moeten worden gemarkeerd met val of var. Je kunt de modifiers open, abstract, sealed of inner niet gebruiken voor een data class.

Automatische equals, hashCode en toString methoden

equals en hashCode worden gegenereerd op basis van de waarden van alle eigenschappen uit de primary constructor. Twee instanties van een data class worden als gelijk beschouwd als al hun overeenkomstige eigenschappen gelijk zijn.

equals voor waardevergelijking

In Java is standaard objectvergelijking referentievergelijking (==). Voor waardevergelijking is het overschrijven van equals vereist. Kotlin data class doet dit automatisch, waardoor == kan worden gebruikt voor structurele vergelijking.

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

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

toString voor debugging

De toString methode retourneert een leesbare weergave van het object met de namen en waarden van alle eigenschappen. Dit vereenvoudigt logging en debugging aanzienlijk in vergelijking met Java, waar standaard de hashcode in hexadecimaal formaat wordt weergegeven.

Volgens Kotlin Documentation (2026) heeft toString van een data class het formaat: “User(id=1, name=John, email=john@example.com)”. Bij het verwijderen van eigenschappen uit de primary constructor wordt toString automatisch bijgewerkt — het risico op desynchronisatie is uitgesloten.

De copy functie en destructurering

copy — een van de belangrijkste functies van data class. Het maakt een ondiepe kopie van het object met de mogelijkheid om de waarden van opgegeven eigenschappen te wijzigen.

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 is onmisbaar in functionele stijl en architecturen met onveranderlijkheid (immutability). In plaats van mutatie van een bestaand object wordt een nieuwe kopie met gewijzigde velden gemaakt, wat de code voorspelbaarder en veiliger maakt in multithreaded scenario's.

Destructurering via componentN

data class genereert automatisch de functies component1, component2 enzovoort voor elke eigenschap in de volgorde van declaratie. Dit maakt het mogelijk om het object te destructuren in variabelen.

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

Destructurering werkt ook in lambda's en for-each loops, wat data class handig maakt voor het werken met collecties.

Beperkingen en aanbevelingen

Eerste beperking — data class ondersteunt geen overerving van een andere data class. Kan alleen overerven van gewone klassen of interfaces.

Tweede — automatische methoden omvatten alleen eigenschappen van de primary constructor. Eigenschappen in de klassebody worden genegeerd, wat kan leiden tot onjuiste equals als je dit vergeet.

Derde — data class kan niet open, abstract, sealed of inner zijn. Het is altijd final.

Vierde — voor collecties binnen een data class voert copy ondiepe kopiëring uit. Het wijzigen van elementen in de gekopieerde collectie zal het origineel beïnvloeden.

Volgens Kotlin Best Practices (2026) is data class optimaal voor DTO's, API-modellen, value objects en state-objecten. Voor componenten met bedrijfslogica wordt het gebruik van gewone klassen aanbevolen.

Veelgestelde vragen

Kan een data class een andere data class overerven?

Nee, data class kan geen andere data class overerven. Het kan echter wel een gewone klasse overerven of interfaces implementeren.

Hoeveel eigenschappen moeten er in de primary constructor zijn?

Ten minste één eigenschap. Het maximum aantal is niet beperkt, maar voor destructurering wordt tot componentN gegenereerd.

Nemen eigenschappen uit de klassebody deel aan equals?

Nee, automatische methoden houden alleen rekening met eigenschappen uit de primary constructor. Eigenschappen uit de klassebody nemen niet deel aan equals, hashCode, toString en copy.

Kan ik automatische methoden handmatig overschrijven?

Ja, u kunt equals, hashCode of toString overschrijven in de body van een data class. In dat geval genereert de compiler geen eigen implementatie.

Wat is het verschil tussen een data class en een gewone klasse?

data class genereert automatisch equals, hashCode, toString, copy en componentN. Een gewone klasse biedt deze methoden niet zonder handmatige implementatie.

Samenvatting

  • data class — syntaxconstructie in Kotlin voor gegevensopslag met automatische methodengeneratie
  • equals en hashCode — structurele vergelijking op basis van primary constructor eigenschappen
  • toString — leesbare objectweergave voor debugging en logging
  • copy — ondiepe kopiëring met vervanging van afzonderlijke velden via benoemde argumenten
  • componentN — destructurering van objecten in variabelen voor handig werken met collecties
  • Beperkingen — standaard final, ten minste één eigenschap, geen data->data overerving
  • Toepassing — DTO, API-modellen, value objects, state in MVVM

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook