Lombok macht das schon

Hallo Spaß-Coder.

Wer kennt sie nicht: Datenklassen, die ausschließlich Attribute enthalten um Daten aufzunehmen und selbst keine Logik beinhalten? Sei es für die Entitäten der Datenbanktabellen oder einfache Datentranfsfer-Objekte. Diese Klasse könnte echt übersichtlich und aufgeräumt sein, wären da nicht diese Getter und Setter der Attribute, eine Implementierung der toString()-Methode, equals() oder hashCode().

Damit wird die vermeintlich einfache Klasse doch wieder recht unübersichtlich und aufgebläht. In diesem Artikel stellen wir eine Bibliothek vor, die es uns ermöglicht, auf das Wesentliche zu fokussieren.

Was macht Lombok?

Das Projekt Lombok[1] stellt eine Java-Bibliothek zu Verfügung, die uns ermöglicht den Code deutlich aufgeräumter zu gestalten und die üblichen erforderlichen Methoden einfach durch Annotationen generieren zu lassen. Wie das aussehen kann, möchten wir euch anhand von ein paar Beispielen verdeutlichen. Dazu verwenden wir unser kleines TicTacToe Spiel, welches wir auch in anderen Artikeln bereits als Beispiel herangezogen hatten.

Geben und Nehmen

Unsere Entities sollen Daten tragen. Diese sind per Konvention zunächst einmal als private markiert. Damit wir doch Zugriff darauf haben, verwenden wir Getter und Setter. Im Normalfall können die nicht viel und verschmutzen unseren schönen Code.

Schauen wir doch mal, was Lombok in diesem Fall für uns tun kann:

Natural Pure Java Mit Lombok-Magie

Durch die beiden einfachen Annotationen @Getter und @Setter lassen sich in diesem Beispiel 10 Zeilen Code sparen. Das schöne daran ist, dass nun gut sichtlich wird, dass die Methode getNextMove() kein klassischer Getter ist, sondern über eine Strategie ein bestimmtes Verhalten erzeugt (dazu kommen wir in einem anderen Artikel noch). So erkennen wir den wichtigen Teil unseres Codes viel schneller.

Nullen sind hier nicht erlaubt!

Frei nach dem Prinzip fail fast wollen wir oft die Eingangsparameter unserer Methoden prüfen. Die häufigste Prüfung ist dabei die Prüfung darauf, dass der übergebene Parameter nicht null ist.

Auch hier schauen wir mal, wie Lombok uns das Leben vereinfacht:

Natural Pure Java Mit Lombok-Magie

Auch hier reicht eine einfache Annotation. Wir erhalten eine NullPointerException und als Nachricht den Namen des betroffenen Parameters…und sparen 3 Zeilen Code…pro zu prüfendem Parameter.

Noch besser: Kombinieren wir z.B. die @Setter-Annotation mit der @NonNull-Annotation, kümmert sich Lombok sogar gleich darum:

Natural Pure Java Mit Lombok-Magie

Drei Annotations anstelle von 9 Zeilen Code, die in aller Regel immer gleich aussehen.

Vergleichende Objekte

Werfen wir auch noch einen Blick auf das Thema equals und hashCode, welches wir eingangs des Artikels angesprochen haben:

Natural Pure Java  (IDE-generiert) Mit Lombok-Magie

Auf der einen Seite durch IntelliJ generierte equals– und hashCode-Methoden, bei denen die Variable strategy aus dem Vergleich ausgelassen wurde. Auf der anderen Seite die Klasse mit der Annotation @EqualsAndHashCode, sowie einer ergänzenden Anweisung, welche Variablen ausgelassen werden sollen (in unserem Fall eben strategy). Übersichtlich, oder?

Und nun, alle zusammen…

Als letztes möchten wir noch ein Beispiel für echte, dumme Datentransportobjekte verwenden. Diesmal nehmen wir als Beispiel nicht mehr die Klasse Player, die hatte ja durch die Delegation der Aufgabe an die übergebene Strategie schon ein bisschen Intelligenz an Bord.

Stattdessen muss diesmal die Klasse PlayerData als Beispiel herhalten. Diese besteht aus drei Eigenschaften, mit Gettern, einem Konstruktor mit allen Werten als Übergabeparameter, equals, hashCode, toString, alles was man eben so braucht, wenn man als Datentransportobjekt was auf sich hält.

Natural Pure Java  (teilweise IDE-generiert) Mit Lombok-Magie

Ein Wort: @Data. Reicht oder? 😉

Und sonst?

Die Projektseite enthält eine sehr gute (englischsprachige) Beschreibung der Funktionalität, weshalb wir hier nicht alle einzeln beschreiben, sondern euch einladen, einfach mal durchzuschauen, was hinter Lombok steckt und was es sonst noch kann.

Unsere Erfahrungen mit Lombok

Kleine Klassen auch wirklich klein und übersichtlich zu halten funktioniert mit Lombok sehr gut. Auch wenn sicherlich jede Entwicklungsumgebung Getter und Setter mittlerweile per Knopfdruck generiert, stehen sie dennoch im Code und blähen diesen unnötig auf. Der Blick in die annotierte – beinahe leere – Klasse ist etwas gewöhnungsbedürftig, beschleunigt allerdings auch das Arbeiten und lenkt unsere Aufmerksamkeit stärker auf das Wesentliche – nämlich die umzusetzenden Anforderungen.

Verwendung und Einrichtung

Wir haben Lombok bisher nur zusammen mit IntelliJ in Verbindung mit Maven verwendet. Damit dies reibungslos funktioniert, braucht es folgende Zutaten:

  1. Das Lombok-Plugin für IntelliJ
    • seit Version 2020.3 ist Lombok gebündelt in IntelliJ enthalten
    • Für ältere Versionen einfach wie alle Plugins installieren, ist unter „Lombok“ im Plugin-Repository zu finden
  2. Die Abhängigkeit zu Lombok in der pom.xml
  3. In den Einstellungen ist die Verarbeitung von Annotationen zu aktivieren (Settings > Build, Execution, Deployment > Compiler > Annotation Processors > Enable Annotation Processing).

Lombok funktioniert auch mit anderen IDEs, etwa Eclipse. Details dazu sind ebenfalls auf der Projektseite von Lombok zu finden.

Zusammenfassung

In diesem Artikel haben wir euch eine Bibliothek vorgestellt, die das Leben eines Entwicklers vereinfachen kann und Java-Klassen aufgeräumt und damit übersichtlich hält. Es gibt keinen Grund Lombok nicht einmal auszuprobieren. Selbst wenn ihr euch nach einiger Zeit im Projekt dafür entscheiden solltet, Lombok nicht mehr zu verwenden, könnt ihr die Annotationen mit Hilfe von Delombok sehr leicht wieder in „normalen“ Java-Code überführen.

Welche Bibliothek unterstützt euch beim Sauberhalten eures Codes?

Eure Spaß-Coder

Referenzen:

Ein Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert