{"id":4686,"date":"2023-08-26T13:03:13","date_gmt":"2023-08-26T11:03:13","guid":{"rendered":"https:\/\/www.tutego.de\/blog\/javainsel\/?p=4686"},"modified":"2023-08-26T13:03:13","modified_gmt":"2023-08-26T11:03:13","slug":"inselupdate-records-implementieren-schnittstellen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2023\/08\/inselupdate-records-implementieren-schnittstellen\/","title":{"rendered":"Inselupdate: Records implementieren Schnittstellen"},"content":{"rendered":"<p>Obwohl Records keine Klassen erweitern k\u00f6nnen, k\u00f6nnen sie Schnittstellen implementieren. Dies erm\u00f6glicht uns, Abstraktionen zu erstellen, was n\u00fctzlich ist, um gemeinsame Record-Komponenten zu teilen.<\/p>\n<p>Betrachten wir ein Beispiel. Wir wollen den Basistyp Event nicht mehr als abstrakte Oberklasse deklarieren, sondern als Schnittstelle:<\/p>\n<pre>interface Event {\r\n\r\n\u00a0 String about();\r\n\r\n\u00a0 int duration();\r\n\r\n}<\/pre>\n<p>Das erlaubt es uns, zwei Records zu deklarieren, die die Event-Schnittstelle implementieren:<\/p>\n<pre>record Nap( String about, int duration ) implements Event {}\r\n\r\nrecord Workout( String about, int duration, int caloriesBurned ) implements Event {}<\/pre>\n<p>Der clevere Teil dabei ist, dass die Records bereits die Zugriffsmethoden String about() und int duration() besitzen, sodass keine zus\u00e4tzliche Implementierung erforderlich ist.<\/p>\n<p>Mit dieser Typbeziehung k\u00f6nnen wir Folgendes tun:<\/p>\n<pre><strong>Event<\/strong> event = new <strong>Nap<\/strong>( \"Snooze Olympics\", 69 );\r\n\r\nSystem.out.println( event.about() );\r\n\r\nSystem.out.println( event.duration() );<\/pre>\n<p>In diesem Fall ist der Referenztyp Event und der Objekttyp Nap. Mit dieser Abstraktion l\u00e4sst sich perfekt Pattern-Matching und Record-Pattern einsetzen:<\/p>\n<pre>switch ( event ) {\r\n\r\n\u00a0 <strong>case Nap nap<\/strong> -&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.printf( \"%d minutes of ninja-level rest!%n\", nap.duration );\r\n\r\n\u00a0 <strong>case Workout( var about, var duration, var calories )<\/strong> -&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.printf(\"You just burned %d calories for a guilt-free gummy bear.%n\", calories );\r\n\r\n\u00a0 default -&gt; {}\r\n\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Obwohl Records keine Klassen erweitern k\u00f6nnen, k\u00f6nnen sie Schnittstellen implementieren. Dies erm\u00f6glicht uns, Abstraktionen zu erstellen, was n\u00fctzlich ist, um gemeinsame Record-Komponenten zu teilen. Betrachten wir ein Beispiel. Wir wollen den Basistyp Event nicht mehr als abstrakte Oberklasse deklarieren, sondern als Schnittstelle: interface Event { \u00a0 String about(); \u00a0 int duration(); } Das erlaubt es [&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,124],"tags":[],"class_list":["post-4686","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-21"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4686","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=4686"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4686\/revisions"}],"predecessor-version":[{"id":4687,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4686\/revisions\/4687"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}