{"id":4438,"date":"2019-11-06T12:32:13","date_gmt":"2019-11-06T10:32:13","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4438"},"modified":"2019-11-06T12:32:13","modified_gmt":"2019-11-06T10:32:13","slug":"this-fuer-kaskadierte-methoden-und-builder","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2019\/11\/this-fuer-kaskadierte-methoden-und-builder\/","title":{"rendered":"this f\u00fcr kaskadierte Methoden und Builder"},"content":{"rendered":"<p>Die append(\u2026)-Methoden bei StringBuilder liefern die this-Referenz, sodass sich Folgendes schreiben l\u00e4sst:<\/p>\n<pre>StringBuilder sb = new StringBuilder();\r\nsb.append( \"Android oder iPhone\" ).append( '?' );<\/pre>\n<p>Jedes append(\u2026) liefert das StringBuilder-Objekt, auf dem es aufgerufen wird \u2013 wir k\u00f6nnen also Methoden kaskadiert anh\u00e4ngen oder es bleiben lassen.<\/p>\n<p>Wir wollen diese M\u00f6glichkeit bei einem Zauberer (Klasse Wizard) programmieren, sodass die Methoden name(String) und age(int) Spielername und Alter zuweisen. Beide Methoden liefern ihr eigenes Wizard-Objekt \u00fcber die this-Referenz zur\u00fcck:<\/p>\n<pre>class Wizard {\r\n\r\n\r\n\r\n\u00a0 String name = \"\";\r\n\r\n\u00a0 int age;\r\n\r\n\r\n\r\n\r\n\u00a0 Wizard name( String name ) { this.name = name; return this; }\r\n\r\n\u00a0 String name() { return name; }\r\n\r\n\r\n\r\n\r\n\u00a0 Wizard age( int item ) { this.age = item; return this; }\r\n\r\n\u00a0 int age() { return age; }\r\n\r\n\r\n\r\n\r\n\u00a0 String format() {\r\n\r\n\u00a0\u00a0\u00a0 return name + \" ist \" + age;\r\n\r\n\u00a0 }\r\n\r\n}<\/pre>\n<p>Erzeugen wir einen Wizard, und kaskadieren wir einige Methoden:<\/p>\n<pre>Wizard gundalf = new Wizard().name( \"Gundalf\" ).age( 60 );\r\n\r\nSystem.out.println( gundalf.name() );\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Gundalf\r\n\r\nSystem.out.println( gundalf.format() );\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Gundalf ist 60<\/pre>\n<p>Der Ausdruck new Wizard() liefert eine Referenz, die wir sofort f\u00fcr den Methodenaufruf nutzen. Da name(String) wiederum eine Objektreferenz vom Typ Wizard liefert, ist dahinter direkt .age(int) m\u00f6glich. Die Verschachtelung von name(&#8222;Gunalf&#8220;).age(60) bewirkt, dass Name und Alter gesetzt werden und der jeweils n\u00e4chste Methodenaufruf in der Kette \u00fcber this eine Referenz auf dasselbe Objekt, aber mit ver\u00e4ndertem internem Zustand bekommt.<\/p>\n<p>Beispiele dieser Bauart sind in der Java-Bibliothek an einigen Stellen zu finden. Sie werden auch Builder genannt.<\/p>\n<p>Hinweis: Die Methode Wizard name(String) ist mit ihrer R\u00fcckgabe praktisch, verst\u00f6\u00dft aber aus zwei Gr\u00fcnden gegen die JavaBeans-Konvention: Setter d\u00fcrfen keine R\u00fcckgabe haben und m\u00fcssen immer mit set beginnen. JavaBeans sind also nicht so dieser kompakten Builder-Schreibweise \u201ekompatibel\u201c.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die append(\u2026)-Methoden bei StringBuilder liefern die this-Referenz, sodass sich Folgendes schreiben l\u00e4sst: StringBuilder sb = new StringBuilder(); sb.append( &#8222;Android oder iPhone&#8220; ).append( &#8218;?&#8216; ); Jedes append(\u2026) liefert das StringBuilder-Objekt, auf dem es aufgerufen wird \u2013 wir k\u00f6nnen also Methoden kaskadiert anh\u00e4ngen oder es bleiben lassen. Wir wollen diese M\u00f6glichkeit bei einem Zauberer (Klasse Wizard) programmieren, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-4438","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4438"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4438\/revisions"}],"predecessor-version":[{"id":4439,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4438\/revisions\/4439"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}