© Excellent backgrounds/Shutterstock.com
Ein Blick auf JEP 359: Java Records

Rekordverdächtig strukturiert


Datenklassen, also Java-Klassen, deren einziger Zweck darin besteht, Daten zu halten und diese über Getter und Setter zugänglich zu machen, gehören in vielen Softwareprojekten zu den größten Sammelstellen von Boilerplate-Code. Für jede neue Klasse jeweils Konstruktoren, die Methoden equals, hashCode und toString und für jedes Feld noch einen Getter und einen Setter zu erstellen, ist für viele Entwickler eine verhasste Zeremonie geworden – sofern sie nicht direkt Bibliotheken wie Lombok einsetzen, um dieser zu entgehen. JEP 359 soll Abhilfe schaffen.

Mit JEP 359 werden Records in die JVM eingeführt – wenn auch vorerst nur als Preview Feature. Um sie ausprobieren zu können, müssen sowohl der Compiler als auch das erstellte Programm mit dem Flag --enable-preview ausgeführt werden.

Das Problem, das mit Records gelöst werden soll

Was genau macht das Erstellen von Datenklassen in Java so mühsam? Das Herzstück solcher Klassen ist die definierte Liste von Instanzvariablen, die die Zustandsbeschreibung eines Objekts darstellen. Möchten Entwickler eine Klasse entwerfen, die einen Würfel widerspiegelt, kommen sie mit drei Variablen aus: Höhe, Breite und Tiefe. Um mit Instanzen des Typs Würfel arbeiten zu können, müssen sie allerdings weitere Formalitäten erfüllen: Die Klasse benötigt Konstruktoren, Getter und Setter. Ebenfalls müssen die Methoden equals, hashCode und toString überschrieben werden. Diese gesamte Arbeit läuft in den allermeisten Fällen so gleichförmig ab, dass Entwickler sie automatisiert von ihrer Entwicklungsumgebung vornehmen lassen: Für jede Instanzvariable werden Getter und Setter erstellt, alle sollen bei hashCode, equals und toString berücksichtigt werden (oder schlimmer: hashCode und equals werden erst gar nicht implementiert). Oft wird auch noch ein Konstruktor definiert, der sämtliche Variablen als Parameter enthalten kann, um ein Objekt vollständig initialisiert erstellen zu können. Nach dieser Prozedur hat die Klasse dann knapp 65 Zeilen Code, von denen etwa fünf ausreichen, um die wichtigste Information zu beschreiben – den Namen, den Modifier und welchen Zustand sie hält.

Natürlich können an einem Würfel auch seine Oberfläche, Kantenlänge oder sein Volumen interessant sein – diese Werte leiten sich aber von seiner Zustandsbeschreibung ab und stellen keine neuen Variablen dar. Um das Volumen des Würfels zu erhalten, würden Entwickler eine Methode calculateVolume() bereitstellen, die die Länge, Höhe und Breite des Würfels multipliziert. ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang