data class in Kotlin — was es ist, Syntax und Eigenschaften von Datenklassen

Autor: IT Sectr Veröffentlicht: 2026-06-20 Lesezeit: 10 Min.

data class in Kotlin ist ein spezieller Klassentyp, der ausschließlich zum Speichern von Daten entwickelt wurde. Der Compiler generiert automatisch die Methoden equals, hashCode, toString, copy und componentN basierend auf den im primären Konstruktor angegebenen Eigenschaften. Laut JetBrains-Dokumentation (2026) ermöglicht data class eine Reduzierung des Boilerplate-Codes um 50–70% im Vergleich zu Java-Äquivalenten und ist die Grundlage für Wertobjekte in Kotlin-Projekten.

Wichtige Punkte

  • data — Schlüsselwort zum Deklarieren einer Datenklasse in Kotlin
  • equals und hashCode — werden automatisch basierend auf allen Eigenschaften des primären Konstruktors generiert
  • copy — Funktion zum flachen Kopieren mit der Möglichkeit, einzelne Felder zu ersetzen
  • componentN — Destrukturierung der data class in separate Variablen
  • Der primäre Konstruktor muss mindestens einen val- oder var-Parameter enthalten

Was ist eine data class in Kotlin?

data class ist ein syntaktisches Konstrukt von Kotlin, das automatisch Standardmethoden für Klassen generiert, deren Hauptzweck das Speichern von Daten ist. Bei der Deklaration einer data class erstellt der Compiler Implementierungen von equals, hashCode, toString, copy und componentN basierend auf allen Eigenschaften des primären Konstruktors.

Im Gegensatz zu regulären Klassen in Java, bei denen der Entwickler manuell Getter, Setter, equals, hashCode und toString mit IDE oder Bibliotheken wie Lombok schreiben muss, bietet Kotlin einen eingebauten Mechanismus. Dies reduziert nicht nur den Code, sondern gewährleistet auch Konsistenz — automatische Methoden entsprechen immer der aktuellen Eigenschaftsstruktur.

Laut der JetBrains Kotlin-Umfrage (2025) wird data class in 78% der Kotlin-Projekte verwendet, was es zu einer der gefragtesten Sprachfunktionen macht. Besonders beliebt ist es in Architekturen mit DTOs, API-Antwortmodellen und Zustandsobjekten in MVVM.

Syntax und grundlegende Funktionen

data class wird mit dem Schlüsselwort data vor class deklariert. Alle Eigenschaften, die an den automatischen Methoden beteiligt sind, werden im primären Konstruktor angegeben.

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

Eine Codezeile ersetzt Dutzende von Boilerplate-Zeilen in Java. Der Compiler generiert equals, hashCode, toString, copy und component1–component3 für alle drei Eigenschaften.

Eigenschaften außerhalb des primären Konstruktors

Automatische Methoden umfassen nur Eigenschaften des primären Konstruktors. Wenn eine Eigenschaft im Klassenkörper deklariert wird, nimmt sie nicht an equals, hashCode, toString und copy teil.

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

Einschränkungen des primären Konstruktors

Der primäre Konstruktor einer data class muss mindestens einen Parameter enthalten. Alle Parameter müssen als val oder var markiert sein. Für eine data class können die Modifikatoren open, abstract, sealed oder inner nicht verwendet werden.

Automatische Methoden equals, hashCode und toString

equals und hashCode werden basierend auf den Werten aller Eigenschaften des primären Konstruktors generiert. Zwei Instanzen einer data class gelten als gleich, wenn alle ihre entsprechenden Eigenschaften gleich sind.

equals für Wertvergleich

In Java ist der Standardobjektvergleich ein Referenzvergleich (==). Für den Wertvergleich muss equals überschrieben werden. Kotlin data class erledigt dies automatisch und ermöglicht die Verwendung von == für strukturelle Vergleiche.

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

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

toString zur Fehlersuche

Die Methode toString gibt eine lesbare Darstellung des Objekts mit Namen und Werten aller Eigenschaften zurück. Dies vereinfacht die Protokollierung und Fehlersuche erheblich im Vergleich zu Java, wo die Standardausgabe den Hash-Code im Hexadezimalformat anzeigt.

Laut der Kotlin-Dokumentation (2026) hat toString einer data class das Format: „User(id=1, name=John, email=john@example.com)“. Beim Entfernen von Eigenschaften aus dem primären Konstruktor wird toString automatisch aktualisiert — das Risiko einer Desynchronisierung ist ausgeschlossen.

copy-Funktion und Destrukturierung

copy ist eine der wichtigsten Funktionen von data class. Sie erstellt eine flache Kopie des Objekts mit der Möglichkeit, Werte bestimmter Eigenschaften zu ändern.

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 ist im funktionalen Stil und in Architekturen mit Unveränderlichkeit unverzichtbar. Anstatt ein vorhandenes Objekt zu mutieren, wird eine neue Kopie mit geänderten Feldern erstellt, was den Code vorhersagbarer und in Multithread-Szenarien sicherer macht.

Destrukturierung durch componentN

data class generiert automatisch die Funktionen component1, component2 usw. für jede Eigenschaft in der Reihenfolge ihrer Deklaration. Dies ermöglicht die Destrukturierung des Objekts in Variablen.

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

Destrukturierung funktioniert auch in Lambdas und for-each-Schleifen, was data class für die Arbeit mit Sammlungen praktisch macht.

Einschränkungen und Empfehlungen

Erste Einschränkung — data class unterstützt keine Vererbung von einer anderen data class. Es kann nur von regulären Klassen oder Schnittstellen geerbt werden.

Zweite — automatische Methoden umfassen nur Eigenschaften des primären Konstruktors. Eigenschaften im Klassenkörper werden ignoriert, was zu einem falschen equals führen kann, wenn Sie dies vergessen.

Dritte — data class kann nicht open, abstract, sealed oder inner sein. Sie ist immer final.

Vierte — für Sammlungen innerhalb einer data class führt copy eine flache Kopie durch. Das Ändern von Elementen innerhalb der kopierten Sammlung wirkt sich auf das Original aus.

Laut den Kotlin-Best Practices (2026) ist data class optimal für DTOs, API-Modelle, Wertobjekte und Zustandsobjekte. Für Komponenten mit Geschäftslogik wird die Verwendung regulärer Klassen empfohlen.

Häufig gestellte Fragen

Kann eine data class von einer anderen data class erben?

Nein, eine data class kann nicht von einer anderen data class erben. Sie kann jedoch von einer regulären Klasse erben oder Schnittstellen implementieren.

Wie viele Eigenschaften müssen im primären Konstruktor sein?

Mindestens eine Eigenschaft. Die maximale Anzahl ist nicht begrenzt, aber componentN wird für die Destrukturierung generiert.

Beeinflussen Eigenschaften aus dem Klassenkörper equals?

Nein, automatische Methoden berücksichtigen nur Eigenschaften des primären Konstruktors. Eigenschaften aus dem Klassenkörper nehmen nicht an equals, hashCode, toString und copy teil.

Kann ich automatische Methoden manuell überschreiben?

Ja, Sie können equals, hashCode oder toString im Körper der data class überschreiben. In diesem Fall generiert der Compiler keine eigene Implementierung.

Wie unterscheidet sich data class von einer regulären Klasse?

Eine data class generiert automatisch equals, hashCode, toString, copy und componentN. Eine reguläre Klasse stellt diese Methoden ohne manuelle Implementierung nicht bereit.

Zusammenfassung

  • data class — syntaktisches Kotlin-Konstrukt zum Speichern von Daten mit automatisch generierten Methoden
  • equals und hashCode — struktureller Vergleich basierend auf Eigenschaften des primären Konstruktors
  • toString — lesbare Objektdarstellung für Fehlersuche und Protokollierung
  • copy — flaches Kopieren mit Ersetzung einzelner Felder durch benannte Argumente
  • componentN — Destrukturierung von Objekten in Variablen für komfortable Arbeit mit Sammlungen
  • Einschränkungen — standardmäßig final, mindestens eine Eigenschaft, keine data->data-Vererbung
  • Verwendung — DTOs, API-Modelle, Wertobjekte, Zustand in MVVM

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch