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 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.
data class wordt gedeclareerd met het sleutelwoord data voor class. Alle eigenschappen die deelnemen aan de automatische methoden worden gespecificeerd in de primary constructor.
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.
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.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice is NIET opgenomen in equals/hashCode/copy
}
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.
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.
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.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // waar
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.
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.
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.
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.
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.
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
Nee, data class kan geen andere data class overerven. Het kan echter wel een gewone klasse overerven of interfaces implementeren.
Ten minste één eigenschap. Het maximum aantal is niet beperkt, maar voor destructurering wordt tot componentN gegenereerd.
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.
Ja, u kunt equals, hashCode of toString overschrijven in de body van een data class. In dat geval genereert de compiler geen eigen implementatie.
data class genereert automatisch equals, hashCode, toString, copy en componentN. Een gewone klasse biedt deze methoden niet zonder handmatige implementatie.
Samenvatting
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.
Lees ook