Mit der Einführung von Records hat Java einen eleganten Weg geschaffen, um unveränderliche Datenobjekte effizient und ausdrucksstark zu modellieren. Records ersetzen den klassischen, oft umfangreichen Boilerplate-Code für Datenklassen durch eine kompakte, deklarative Syntax. Sie eignen sich hervorragend für Value Objects, Data Transfer Objects (DTOs) oder als Rückgabetypen in APIs.
Was sind Java Records?
Ein Record ist ein spezieller Klassentyp, der für die Speicherung von Daten entwickelt wurde. Die Felder eines Records sind automatisch private und final, der Zustand eines Record-Objekts kann nach der Erstellung nicht mehr verändert werden. Konstruktor, Getter-Methoden, sowie sinnvolle Implementierungen von equals(), hashCode() und toString() werden automatisch generiert.
Beispiel
1 |
public record Person(String name, int age) {} |
Mit nur einer Zeile Code erhält man eine voll ausgestattete, unveränderliche Datenklasse.
Oder:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public record KalenderParam(File fileName, LocalDate targetDate, LocalDate fromDate, String summaryText, List<String> selectedWorkday) { // Zusätzlicher Konstruktor mit weniger Parametern optional möglich, dann aber immer mit this // Jeder zusätzliche Konstruktor muss letztlich den kanonischen Konstruktor aufrufen, also mit `this(...)` initialisieren // Die Anzahl der Argumente in zusätzlichen Konstruktoren darf nicht größer sein als die der Record-Komponenten // public KalenderParam(File fileName, LocalDate targetDate) { // this(fileName, targetDate, null, "", List.of()); // } // in einer Java-Record-Klasse kannst du statische Methoden definieren. Records unterstützen statische Methoden und statische Felder genauso wie normale Klassen // public static KalenderParam empty() { // return new KalenderParam(null, null, null, "", List.of()); //} } |
Eigenschaften und Vorteile
–Immutabilität: Die Daten eines Records sind nach der Instanziierung fest und können nicht mehr verändert werden.
–Automatisch generierte Methoden: Konstruktor, Getter, equals(), hashCode() und toString() werden vom Compiler bereitgestellt.
–Kompakte Syntax: Records reduzieren den Quellcode und erhöhen die Lesbarkeit.
–Erweiterbarkeit: Eigene Methoden, zusätzliche Konstruktoren und statische Hilfsmethoden lassen sich problemlos ergänzen.
–Sicherheit: Durch die Unveränderlichkeit eignen sich Records besonders für den parallelen Einsatz und die Übertragung sensibler Daten.
Einschränkungen
– Records sind immer final und können nicht erweitert werden.
– Sie können Interfaces implementieren, aber keine andere Klasse erben.
– Felder dürfen nicht verändert werden und müssen im Konstruktor initialisiert werden.
– Records sind nicht für komplexes Verhalten oder Zustandsverwaltung gedacht, sondern für die reine Datenhaltung.
Java Records sind ein modernes Sprachfeature, das die Entwicklung von Datenklassen erheblich vereinfacht. Sie fördern sauberen, sicheren und wartbaren Code und sind aus der zeitgemäßen Java-Programmierung nicht mehr wegzudenken.
Wer Wert auf Übersichtlichkeit und Immutabilität legt, sollte Records als Standard für Datenobjekte einsetzen.