Sobes.tech
Junior

Was ist das Besondere an der Data Class im Vergleich zu anderen Klassen in Kotlin?

sobes.tech KI

Antwort von AI

Eigenschaften der Data Class in Kotlin:

  • Automatische Generierung der Funktionen equals(), hashCode(), toString(), copy() und componentN().
  • Erfordern mindestens einen Parameter im Konstruktor.
  • Alle Parameter des Konstruktors müssen als val oder var deklariert werden.
  • Hauptsächlich für die Speicherung von Daten gedacht.

Beispiel:

// Normale Klasse
class User(val name: String, val age: Int)

// Data Class
data class DataUser(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    println(user1 == user2) // false (vergleicht Referenzen standardmäßig)
    println(user1.toString()) // Zeigt etwas wie User@Hashcode

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (vergleicht Daten)
    println(dataUser1.toString()) // Zeigt DataUser(name=Alice, age=30)
}

Unterschiede bei den generierten Funktionen:

Funktion Normale Klasse Data Class
equals() Referenzvergleich Vergleich der Daten nach Feldern
hashCode() Abhängig von der Implementierung Abhängig von den Daten nach Feldern
toString() Klassenname und Hash Klassenname und Feldwerte
copy() Nein (manuelle Implementierung erforderlich) Ja (erlaubt einfache Kopien)
componentN() Nein Ja (ermöglicht Destrukturierung)

Verwendung von componentN():

// Definition einer Data Class
data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // Destrukturierung mit component1(), component2()
    println("x: $x, y: $y") // Zeigt x: 10, y: 20
}