Java : mit „Projekt Lombok“ gegen Boilerplatecode

fMit dem „Projekt Lombok“ kann man den Boilerplatecode seines Projektes auf ein minimum reduzieren.

Aber was ist Boilerplatecode?

Boilerplatecode ist Quellcode welcher für die Verwendung von Klassen (und APIs) benötigt wird und nur ein geringes Abstraktionsniveau hat. D.h. es geht hier um Methoden wie Getter, Setter, Konstuktoren, equals, hascode und toString. Diese Methoden werden zbsp. benötigt um POJOs, Entitys oder andere Objekte zu erzeugen aber sonst haben diese keinen besonderen Mehrwert für die Anwendung.

Wie richtet man Projekt Lombok ein?

Um die Funktionen von Projekt Lombok (Im nachfolgenden nur noch als Lombok bezeichnet.) zu nutzen muss man ein Plugin installieren.

Dieses Plugin ist derzeit (stand 25.09.2018) leider nicht per Marketplace installierbar. 

Das Plugin muss somit von der Herstellerseite https://projectlombok.org/ heruntergeladen werden und kann danach mit einem doppelklick gestartet werden.

Das Plugin ist ein JavaArchiv, einige Browser werden beim Download eine Warnung anzeigen welche man Aktzeptieren muss.

Installieren des Plugins

Nachdem die Datei „lombok.jar“ mit einem doppelklick gestartet wurde, wird nach Eclipse Installationen gesucht.

Projekt Lombok - suchen nach Eclipse installationen
Projekt Lombok – suchen nach Eclipse installationen

Die Entwicklungsumgebung Eclipse kann als ZIP entpackt und in ein beliebiges Verzeichnis abgelegt werden, daher kann die suche etwas länger dauern.

Wenn die Eclipse installation nicht gefunden wurde so kann diese mit der Schaltfläche „Specify location…“ hinzugefügt werden.
Im nächsten Schritt wird nun die Eclipse Installation durch das setzen der Checkbox ausgewählt (1) (per default sind alle gewählt) und mit der Schaltfläche „Install / Update“ (2) wird die installation gestartet.

Projekt Lombok - zusätzlich hinzugefügte Eclipse installation
Projekt Lombok – zusätzlich hinzugefügte Eclipse installation

Wurde das Plugin korrekt installiert so wird der folgende Dialog angezeigt.

Projekt Lombok - installation des Plugins abgeschlossen
Projekt Lombok – installation des Plugins abgeschlossen

Wenn die Eclipse IDE mit eigenen Parametern für die Virtuelle Maschine (-vm parameter) gestartet wird, so muss zusätzlich das JavaArchiv eingebunden werden. In diesem speziellen Fall wird die Zeile „-vmargs -javaagent:lombok.jar“ den Parametern angehängt.

Prüfen ob Projekt Lombok installiert wurde

Auch wenn die Installation des Frameworks „Projekt Lombok“ vermeldet das die Installation erfolgreich verlaufen ist wollen wir prüfen ob dieses wirklich so ist.
Dazu startet man Eclipse und öffnet über das Menü „Help“ > „About Eclipse IDE“ den Infodialog. Dort sollte es nun eine zusätzliche Zeile geben wo auf das Plugin hingewiesen wird.

About Eclipse - validieren der Installation
About Eclipse – validieren der Installation

Beispielprojekt

Nehmen wir uns ein kleines einfaches Beispielprojekt „Greetings“.

In diesem Quellcode sieht man nun welchen Overhead man hat wenn man nur eine kleine Klasse mit nur einem Text erzeugen möchte. Okay auf die Methoden equals, hashCode und toString kann verzichtet werden, jedoch ist es eine gängige Praxis diese Methoden zu implementieren.

In Eclipse lassen sich diese Methoden einfach über das Kontextmenü erzeugen und somit ist die „arbeit“ nur sehr gering. 

JUnit & Ecplise EclEmma Plugin

In jedem guten Java Projekt gibt es Testfälle für den Quellcode.

Hier nun ein kleiner JUnit Testfall für die Klasse „Greeting“

Führen wir die oben stehenden Testfälle einmal aus und nutzen zusätzlich das Testcoverage Plugin EclEmma zur Analyse.

Testcoverageanalyse mit Eclemma
Testcoverageanalyse mit Eclemma

Das Plugin zeigt nun an, das die Methoden equals, hashCode, toString sowie setText nicht getestet wurde und somit nur eine Testabdeckung von 39,2% besteht. Um auf 100% Testabdeckung zu kommen muss man nun alle rot markierten Stellen mit einem JUnit Test abdecken. Und genau hier entstehen aufwände welche man sich sparen kann.

Wir haben es nun geschafft eine 100%ige Testabdeckung zu erstellen, okay das war jetzt bei der Klasse nicht die größte Herausforderung.

Projekt Lombok gegen Boilerplatecode

Nun wollen wir die Klasse „Greeting“ mit Annotations versehen damit die unnötigen Methoden entfallen können. Dazu müssen wir dem Eclipseprojekt das JavaArchiv „lombok.jar“ hinzufügen. 

Im folgenden werde ich zeigen wie die Klasse „Greeting“ mit Hilfe von Lombok und Annotationen verkürzt werden kann.

Konstruktor

Widmen wir uns zuerst dem Konstruktor der Klasse, dieser nimmt den Wert für die Membervariable „Text“ entgegen.
Den Konstruktor können wir mit der Annotation „@RequiredArgsConstructor“ an der Klasse sowie der Annotation „@NonNull“ an der Membervariable „text“ ersetzen. Dieses wird uns auch angezeigt das dieser nun doppelt vorhanden ist.

Compilermeldung das die Methode doppelt vorhanden ist
Compilermeldung das die Methode doppelt vorhanden ist

Hier hat Lombok den Konstruktor bereits erzeugt nur das wir diesen nicht sehen können. Also entfernen wir den Konstrukur, man sieht in dem Tab „Outline“ das der Konstruktor trotzdem erhalten bleibt.

Getter & Setter

Als nächstes geht es dem Getter & Setter an den Kragen diese werden mit der Annotation „@Getter“ & „@Setter“ überflüssig.
Der Annotation kann zusätzlich noch die Sichtbarkeit mitgegeben werden, d.h. soll der Getter bzw. Setter private, protected oder public sein. 

Equals, hashCode & toString

Wie eingangs erwähnt, ist es gute Praxis die Methoden equals, hashCode und toString zu überschreiben. Dieses wird mit der Annotation „@EqualsAndHashCode“ & „@ToString“ an der Klasse erledigt. 

Das Ergebnis & ein Fazit

Haben wir nun alle Annotationen an der Klasse versehen, so sieht diese nun wie folgt aus:

Und der Tab „Outline“ zeigt nun die Methoden an welche wir durch die Annotationen ersetzt haben.

Eclipse - Tab "Outline"
Eclipse – Tab „Outline“

In dem Tab „Outline“ sieht man nun:

  • den Konstruktor,
  • die private Methode „getText();“,
  • die protected Methode „setText(String);“,

Des Weiteren sind die Methoden equals, hashCode und toString mit einem kleinen Dreieck nach oben versehen, das bedeutet das die Methode überschrieben wurden.

Jetzt könnten wir unseren JUnit Testfall ausdünnen und die Testfälle für equals, hashCode, toString und setText entfernen, aber weit gefehlt, denn diese Methoden existieren ja trotzdem noch. D.h. alles was wir getan haben ist, die Methoden vor unseren Augen zu verstecken der Compiler sieht diese trotzdem noch. 

Die Testfälle für equals, hashCode und toString werden nun durch Lombok implementiert und dieses weicht von der Eclipse Version ab daher sind nun die Testfälle nicht mehr valide. Die toString Methode kann man sich ja noch auf der Konsole ausgeben aber beim Rest wird es dann doch schon etwas schwieriger. Hier hilft ein decompiler Plugin weiter.

Binäre Datei Greeting.class decompilieren

Für das decompilieren verwende ich das Eclipse Plugin „Enhanced Class Decompiler“ welches bequem über den Marketplace installiert werden kann.

Eclipse Plugin - Enhanced Class Decompiler
Eclipse Plugin – Enhanced Class Decompiler

decompilierter Code

Mit dem Plugin können wir uns nun den Quellcode anzeigen lassen und sieht die Implementierung von equals und hashCode.

 

 

 

 

 

 

 

 

 

 

 

 

Schreibe einen Kommentar

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