Sobes.tech
Junior

Hoe werken data-classes in Kotlin?

sobes.tech AI

Antwoord van AI

Data-klassen in Kotlin worden gebruikt voor het opslaan van gegevens. De compiler genereert automatisch de standaardmethoden:

  • equals(): Vergelijkt instanties op basis van de waarden van hun eigenschappen.
  • hashCode(): Genereert een hash-code op basis van de waarden van de eigenschappen.
  • toString(): Geeft een stringrepresentatie terug die de namen en waarden van alle eigenschappen bevat.
  • copy(): Maakt een kopie van het object, waarbij indien nodig de waarden van de aangegeven eigenschappen worden gewijzigd.
  • componentN(): Methoden voor destructurering (ontbinding van het object in individuele eigenschappen).
// Voorbeeld van een data-klasse
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // true
    println(user1 == user3) // false

    // toString()
    println(user1.toString()) // User(name=Alice, age=30)

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() en destructurering
    val (name, age) = user1
    println("Naam: $name, Leeftijd: $age") // Naam: Alice, Leeftijd: 30
}

Belangrijke punten:

  • Alle eigenschappen die in de hoofdconstructor zijn gedefinieerd, moeten val of var zijn.
  • Data-klassen kunnen niet abstract, open, sealed of inner zijn.
  • Data-klassen kunnen andere klassen erven of interfaces implementeren.
  • Eigenschappen die buiten de hoofdconstructor worden gedeclareerd, nemen niet deel aan de generatie van standaardmethoden.
Methode Beschrijving
equals() Vergelijkt de eigenschappen van de hoofdconstructor.
hashCode() Genereert een hash op basis van de eigenschappen van de hoofdconstructor.
toString() Toont een stringrepresentatie van de eigenschappen van de hoofdconstructor.
copy() Maakt een oppervlakkige kopie met de mogelijkheid om eigenschappen te wijzigen.
componentN() Toegang tot eigenschappen in de volgorde van hun declaratie in de constructor.

Data-klassen vereenvoudigen het werken met POJO (Plain Old Java Object) of DTO (Data Transfer Object) aanzienlijk, doordat ze boilerplate-code verminderen.