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 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.
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.
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.
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.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice is NOT included in equals/hashCode/copy
}
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.
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.
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.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // true
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 ist eine der wichtigsten Funktionen von data class. Sie erstellt eine flache Kopie des Objekts mit der Möglichkeit, Werte bestimmter Eigenschaften zu ändern.
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.
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.
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.
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
Nein, eine data class kann nicht von einer anderen data class erben. Sie kann jedoch von einer regulären Klasse erben oder Schnittstellen implementieren.
Mindestens eine Eigenschaft. Die maximale Anzahl ist nicht begrenzt, aber componentN wird für die Destrukturierung generiert.
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.
Ja, Sie können equals, hashCode oder toString im Körper der data class überschreiben. In diesem Fall generiert der Compiler keine eigene Implementierung.
Eine data class generiert automatisch equals, hashCode, toString, copy und componentN. Eine reguläre Klasse stellt diese Methoden ohne manuelle Implementierung nicht bereit.
Zusammenfassung
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.
Lesen Sie auch