{"id":10010,"date":"2018-04-24T02:39:51","date_gmt":"2018-04-24T00:39:51","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=10010"},"modified":"2023-05-18T19:47:02","modified_gmt":"2023-05-18T17:47:02","slug":"wie-kann-boilerplate-code-in-java-reduziert-werden","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=10010","title":{"rendered":"Wie kann Boilerplate Code in Java reduziert werden?"},"content":{"rendered":"<p>Das geht mit dem <a href=\"https:\/\/projectlombok.org\/\" rel=\"noopener\" target=\"_blank\">Lombok<\/a> Projekt.<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/lombok-700x545.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/lombok-700x545.png\" alt=\"\" width=\"700\" height=\"545\" class=\"aligncenter size-full wp-image-10011\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/lombok-700x545.png 700w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/lombok-700x545-300x234.png 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>F\u00fcr eine Java-Daten Klasse z.B. Arzt<\/p>\n<pre class=\"lang:java decode:true \" >@Data\r\npublic class Arzt {\r\n\r\n\tprivate String titel;\r\n\r\n\tprivate String vorname;\r\n\r\n\tprivate String name;\r\n\r\n}<\/pre>\n<p>wird dann automatisch folgendes generiert:<!--more--><\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.27.24.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.27.24.png\" alt=\"\" width=\"214\" height=\"288\" class=\"aligncenter size-full wp-image-10012\" \/><\/a><br \/>\nEs werden also alle Getter, Setter, ToString, HashCode, Equals und Konstruktoren erzeugt aber nicht in der Klasse direkt eingef\u00fcgt. Die bleibt also immer \u00fcbersichtlich. <\/p>\n<p>Damit das automatisch funktioniert braucht man nur die <strong>pom.xml<\/strong> um diese eine Abh\u00e4ngigkeit erg\u00e4nzen:<\/p>\n<pre class=\"lang:default decode:true \" >&lt;dependencies&gt;\r\n\t&lt;dependency&gt;\r\n\t\t&lt;groupId&gt;org.projectlombok&lt;\/groupId&gt;\r\n\t\t&lt;artifactId&gt;lombok&lt;\/artifactId&gt;\r\n\t\t&lt;version&gt;1.16.20&lt;\/version&gt;\r\n\t\t&lt;scope&gt;provided&lt;\/scope&gt;\r\n\t&lt;\/dependency&gt;\r\n&lt;\/dependencies&gt;<\/pre>\n<p>Dann muss f\u00fcr die Eclipse IDE einmal das lombok Setup ausgef\u00fchrt werden. Dazu ein doppelklick auf das <strong>lombok.jar<\/strong>. Wenn die IDE nicht im Install-Dialog angezeig wird, muss das f\u00fcr den Mac OS X das Verzeichnis mit der <strong>eclipse.ini<\/strong> ausgew\u00e4hlt werden. Diese Installation muss nur einmal pro IDE ausgef\u00fchrt werden. Und diese Abh\u00e4ngigkeit ist zugleich auch der Nachteil.<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.36.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.36.png\" alt=\"\" width=\"839\" height=\"487\" class=\"aligncenter size-full wp-image-10013\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.36.png 839w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.36-300x174.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.36-768x446.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><br \/>\nDann kommt der Erfolgsdialog mit einigen Hinweisen:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.46.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.46.png\" alt=\"\" width=\"838\" height=\"486\" class=\"aligncenter size-full wp-image-10014\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.46.png 838w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.46-300x174.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.20.46-768x445.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a> <\/p>\n<p>Nun muss nur noch die Eclipse IDE restartet werden. Schon kann man auf die Methoden zugreifen, ohne das die Klasse aufgebl\u00e4ht wird.<\/p>\n<p>Hier die Testklasse dazu:<\/p>\n<pre class=\"lang:default decode:true \" >import static org.junit.Assert.assertEquals;\r\n\r\nimport org.junit.Test;\r\n\r\npublic class ArztTest {\r\n\r\n\t@Test\r\n\tpublic void namensTest() {\r\n\t\tArzt arzt = new Arzt();\r\n\t\tarzt.setName(\"\");\r\n\t\tassertEquals(\"\", arzt.getName());\r\n\t}\r\n\r\n\t@Test\r\n\tpublic void toStringTest() {\r\n\t\tArzt arzt = new Arzt();\r\n\t\tarzt.setName(\"Wenzlaff\");\r\n\t\tarzt.setVorname(\"Thomas\");\r\n\t\tassertEquals(\"Arzt(titel=null, vorname=Thomas, name=Wenzlaff)\", arzt.toString());\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>Das Java 1.8 Projekt sieht dann so aus:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.26.57.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.26.57.png\" alt=\"\" width=\"327\" height=\"361\" class=\"aligncenter size-full wp-image-10017\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.26.57.png 327w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-21.26.57-272x300.png 272w\" sizes=\"auto, (max-width: 327px) 100vw, 327px\" \/><\/a><\/p>\n<p>Und wie ist die Testabdeckung? Nat\u00fcrlich 100% \ud83d\ude09<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-22.01.21.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-22.01.21.png\" alt=\"\" width=\"1375\" height=\"749\" class=\"aligncenter size-full wp-image-10019\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-22.01.21.png 1375w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-22.01.21-300x163.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-22.01.21-768x418.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/Bildschirmfoto-2018-04-23-um-22.01.21-1024x558.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Weitere Beispiele wie z.B. NotNull Check usw. hier. Wer das Testprojekt laden will, kann es hier als <a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/04\/lombok-wenzlaff-de-beispiel.zip\">lombok-wenzlaff-de-beispiel.zip<\/a> laden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das geht mit dem Lombok Projekt. F\u00fcr eine Java-Daten Klasse z.B. Arzt @Data public class Arzt { private String titel; private String vorname; private String name; } wird dann automatisch folgendes generiert:<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[220,4,5,79],"tags":[3236,364,2178,3237,3235,2182],"class_list":["post-10010","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-eclipse","category-java","category-programmierung","tag-boilerplate","tag-code","tag-java","tag-kein-ueberfluessiger-code","tag-lombok","tag-programmierung"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/10010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10010"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/10010\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10010"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}