{"id":80,"date":"2023-11-01T16:42:00","date_gmt":"2023-11-01T15:42:00","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=80"},"modified":"2024-01-08T09:14:56","modified_gmt":"2024-01-08T08:14:56","slug":"projekt-lombok-vereinfachung-von-java-entwicklung-durch-annotationen","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=80","title":{"rendered":"Projekt Lombok: Vereinfachung von Java-Entwicklung durch Annotationen"},"content":{"rendered":"\n<p>Die Java-Entwicklung erfreut sich seit vielen Jahren gro\u00dfer Beliebtheit, jedoch geht sie oft mit einem gewissen Ma\u00df an Boilerplate-Code einher. Um diesem Problem zu begegnen und die Produktivit\u00e4t zu steigern, wurde Projekt Lombok ins Leben gerufen. Lombok ist eine Bibliothek f\u00fcr die Java-Programmiersprache, die mithilfe von Annotationen die Generierung von standardm\u00e4\u00dfigem Code automatisiert. In diesem Artikel werden die verschiedenen Funktionen von Lombok erl\u00e4utert und ihre Einsatzm\u00f6glichkeiten in der t\u00e4glichen Java-Entwicklung aufgezeigt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Motivation f\u00fcr den Einsatz von Projekt Lombok<\/h2>\n\n\n\n<p>Die Hauptmotivation hinter Projekt Lombok besteht darin, den Entwicklern die M\u00f6glichkeit zu geben, effizienteren und \u00fcbersichtlicheren Code zu schreiben. Oftmals wird in Java-Klassen eine betr\u00e4chtliche Menge an Boilerplate-Code ben\u00f6tigt, insbesondere f\u00fcr Getter, Setter, equals(), hashCode() und toString() Methoden. Durch die Verwendung von Lombok-Annotationen kann dieser Code automatisch generiert werden, was zu k\u00fcrzeren und leichter verst\u00e4ndlichen Klassen f\u00fchrt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grundlagen der Erzeugung von Gettern und Settern<\/h2>\n\n\n\n<p>Ein h\u00e4ufiges Muster in Java-Klassen ist die Erzeugung von Getter- und Setter-Methoden f\u00fcr die Klassenvariablen. Mit Lombok k\u00f6nnen diese Methoden mit nur einer Annotation generiert werden. Hier ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> lombok.Getter;\n<span class=\"hljs-keyword\">import<\/span> lombok.Setter;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    @Getter @Setter\n    private <span class=\"hljs-built_in\">String<\/span> name;\n\n    @Getter @Setter\n    private int age;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel werden die Getter- und Setter-Methoden automatisch f\u00fcr die Variablen <code>name<\/code> und <code>age<\/code> generiert. Diese einfache Syntax erleichtert die Code-Pflege und verbessert die Lesbarkeit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lazy Getter<\/h2>\n\n\n\n<p>Ein h\u00e4ufiges Problem in der Programmierung ist die unn\u00f6tige sofortige Initialisierung von Ressourcen oder teuren Berechnungen. Der Lazy Getter von Lombok erm\u00f6glicht es, eine Instanzvariable erst dann zu initialisieren, wenn sie zum ersten Mal abgerufen wird.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import lombok.Getter;\nimport lombok.Lazy;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">LazyExample<\/span> <\/span>{\n    @Getter @Lazy\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> ExpensiveResource resource = initializeResource();\n\n    <span class=\"hljs-keyword\">private<\/span> ExpensiveResource initializeResource() {\n        <span class=\"hljs-comment\">\/\/ Teure Initialisierung hier<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> ExpensiveResource();\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Durch die Verwendung von <code>@Lazy<\/code> wird die <code>ExpensiveResource<\/code> erst dann erstellt, wenn auf den Getter zugegriffen wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fluent Accessors<\/h2>\n\n\n\n<p>Fluent Accessors erm\u00f6glichen eine elegante M\u00f6glichkeit, Methodenketten zu erstellen. Mit Lombok k\u00f6nnen diese durch die <code>@Accessors<\/code>-Annotation konfiguriert werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> lombok.Setter;\n<span class=\"hljs-keyword\">import<\/span> lombok.AccessLevel;\n<span class=\"hljs-keyword\">import<\/span> lombok.experimental.Accessors;\n\n@Accessors(fluent = <span class=\"hljs-literal\">true<\/span>)\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FluentPerson<\/span> <\/span>{\n    @Setter\n    private <span class=\"hljs-built_in\">String<\/span> firstName;\n\n    @Setter\n    private <span class=\"hljs-built_in\">String<\/span> lastName;\n}\n\n<span class=\"hljs-comment\">\/\/ Verwendung<\/span>\nFluentPerson person = <span class=\"hljs-keyword\">new<\/span> FluentPerson();\nperson.firstName(<span class=\"hljs-string\">\"John\"<\/span>).lastName(<span class=\"hljs-string\">\"Doe\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Durch die Konfiguration von <code>@Accessors(fluent = true)<\/code> k\u00f6nnen die Setter-Methoden als Teil einer Methodenreihe (Fluent Interface) aufgerufen werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ToString-Methodenerzeugung<\/h2>\n\n\n\n<p>Die <code>toString()<\/code> Methode ist in Java oft erforderlich, um eine lesbare Darstellung eines Objekts zu erhalten. Mit Lombok kann diese Methode einfach durch die <code>@ToString<\/code>-Annotation generiert werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import lombok.ToString;\n\n@ToString\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ToStringExample<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-keyword\">private<\/span> int age;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Die <code>toString()<\/code> Methode wird automatisch mit dem Format <code>ToStringExample(name=John, age=25)<\/code> generiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Equals- und HashCode-Erzeugung<\/h2>\n\n\n\n<p>Die Generierung von <code>equals()<\/code> und <code>hashCode()<\/code> Methoden kann mit Lombok vereinfacht werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import lombok.EqualsAndHashCode;\n\n@EqualsAndHashCode\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">EqualsAndHashCodeExample<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-keyword\">private<\/span> int age;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Durch die <code>@EqualsAndHashCode<\/code>-Annotation werden die <code>equals()<\/code> und <code>hashCode()<\/code> Methoden automatisch f\u00fcr die definierten Felder generiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Builder-Pattern<\/h2>\n\n\n\n<p>Das Builder-Pattern erm\u00f6glicht die schrittweise Erstellung von Objekten mit optionalen Parametern. Lombok bietet die <code>@Builder<\/code>-Annotation, die die Erzeugung eines Builders f\u00fcr eine Klasse erm\u00f6glicht:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import lombok.Builder;\n\n@Builder\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">BuilderExample<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-keyword\">private<\/span> int age;\n}\n\n<span class=\"hljs-comment\">\/\/ Verwendung<\/span>\nBuilderExample.builder().name(<span class=\"hljs-string\">\"John\"<\/span>).age(<span class=\"hljs-number\">25<\/span>).build();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Durch die <code>@Builder<\/code>-Annotation wird automatisch ein Builder mit Methoden f\u00fcr jede Instanzvariable generiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cleanup-Annotation<\/h2>\n\n\n\n<p>Java-Programmierer sind oft mit der manuellen Bereinigung von Ressourcen wie dem Schlie\u00dfen von Streams oder dem Freigeben von Verbindungen konfrontiert. Lombok bietet die <code>@Cleanup<\/code>-Annotation, um diesen Code zu vereinfachen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> lombok.Cleanup;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CleanupExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        @Cleanup InputStream <span class=\"hljs-keyword\">in<\/span> = <span class=\"hljs-keyword\">new<\/span> FileInputStream(<span class=\"hljs-string\">\"example.txt\"<\/span>);\n        <span class=\"hljs-comment\">\/\/ Code zum Lesen aus der Datei<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Die <code>@Cleanup<\/code>-Annotation sorgt daf\u00fcr, dass die Ressource automatisch geschlossen wird, wenn der Block verlassen wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Synchronized-Annotation<\/h2>\n\n\n\n<p>F\u00fcr den Fall, dass Synchronisierung auf Methodenebene ben\u00f6tigt wird, bietet Lombok die <code>@Synchronized<\/code>-Annotation:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> lombok.Synchronized;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SynchronizedExample<\/span> <\/span>{\n    @Synchronized\n    public <span class=\"hljs-keyword\">void<\/span> synchronizedMethod() {\n        <span class=\"hljs-comment\">\/\/ Gesch\u00fctzter Code, der synchronisiert ist<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Mit <code>@Synchronized<\/code> wird automatisch eine Synchronisationslock f\u00fcr die Methode erstellt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Projekt Lombok bietet eine Vielzahl von Annotationen, die die Entwicklung in Java erheblich vereinfachen k\u00f6nnen. Durch die Automatisierung von Standardaufgaben wird der Code kompakter und lesbarer. Entwickler k\u00f6nnen sich auf die Implementierung von Gesch\u00e4ftslogik konzentrieren, anstatt Zeit mit wiederkehrendem Boilerplate-Code zu verschwenden. Bei der Verwendung von Lombok ist es jedoch wichtig, die Auswirkungen der Annotationen zu verstehen und sicherzustellen, dass sie korrekt angewendet werden, um potenzielle Probleme zu vermeiden. Insgesamt bietet Projekt Lombok eine effektive M\u00f6glichkeit, die Produktivit\u00e4t in der Java-Entwicklung zu steigern und den Code wartbarer zu gestalten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Java-Entwicklung erfreut sich seit vielen Jahren gro\u00dfer Beliebtheit, jedoch geht sie oft mit einem gewissen Ma\u00df an Boilerplate-Code einher. Um diesem Problem zu begegnen und die Produktivit\u00e4t zu steigern, wurde Projekt Lombok ins Leben gerufen. Lombok ist eine Bibliothek f\u00fcr die Java-Programmiersprache, die mithilfe von Annotationen die Generierung von standardm\u00e4\u00dfigem Code automatisiert. In diesem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-80","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/80","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=80"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/80\/revisions"}],"predecessor-version":[{"id":81,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/80\/revisions\/81"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=80"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=80"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}