{"id":642,"date":"2026-02-07T00:54:18","date_gmt":"2026-02-06T23:54:18","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=642"},"modified":"2026-02-16T01:02:03","modified_gmt":"2026-02-16T00:02:03","slug":"unnamed-variables-patterns-in-java-22","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=642","title":{"rendered":"Unnamed Variables &amp; Patterns in Java 22"},"content":{"rendered":"\n<p>Mit der Ver\u00f6ffentlichung von <strong>Java 22<\/strong> hat die Java-Plattform erneut einen bedeutenden Schritt in Richtung moderner Sprachfeatures gemacht. Ein besonders spannendes Feature sind die sogenannten <strong>Unnamed Variables &amp; Patterns<\/strong>. Dieses Feature zielt darauf ab, den Code klarer, pr\u00e4gnanter und zugleich lesbarer zu gestalten, insbesondere in Verbindung mit <strong>Pattern Matching<\/strong>. In diesem Artikel wollen wir dieses Feature ausf\u00fchrlich vorstellen, erl\u00e4utern, wie es funktioniert und anhand von Beispielen aufzeigen, wie Entwickler davon profitieren k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Motivation hinter Unnamed Variables<\/h2>\n\n\n\n<p>In vielen Programmiersprachen entsteht beim Pattern Matching h\u00e4ufig der Bedarf, Variablen zu deklarieren, die sp\u00e4ter nicht explizit genutzt werden. In Java musste man bislang dennoch jede Variable benennen, selbst wenn sie anschlie\u00dfend ignoriert wird. Dies f\u00fchrte h\u00e4ufig zu Code wie:<\/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\">if<\/span> (obj <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-built_in\">String<\/span> s) {\n    <span class=\"hljs-comment\">\/\/ wir benutzen s hier<\/span>\n} <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (obj <span class=\"hljs-keyword\">instanceof<\/span> Integer i) {\n    <span class=\"hljs-comment\">\/\/ wir benutzen i hier<\/span>\n} <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (obj <span class=\"hljs-keyword\">instanceof<\/span> Double d) {\n    <span class=\"hljs-comment\">\/\/ wir benutzen d hier, aber manchmal nicht<\/span>\n}\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>Wenn eine Variable nicht ben\u00f6tigt wird, musste man dennoch einen Namen vergeben, was den Code unn\u00f6tig aufbl\u00e4hte. Java 22 adressiert dieses Problem mit <strong>unnamed variables<\/strong>, also anonymen Variablen, die einfach ignoriert werden k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Syntax von Unnamed Variables<\/h2>\n\n\n\n<p>Unnamed Variables werden durch einen Unterstrich <code>_<\/code> dargestellt. Der Unterstrich signalisiert dem Compiler, dass die Variable zwar Teil des Patterns ist, aber nicht verwendet wird. Das erlaubt es, Patterns klarer und aufger\u00e4umter zu schreiben. Ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">Object<\/span> obj = <span class=\"hljs-number\">42<\/span>;\n\n<span class=\"hljs-keyword\">if<\/span> (obj <span class=\"hljs-keyword\">instanceof<\/span> Integer _) {\n    System.out.println(<span class=\"hljs-string\">\"Es handelt sich um eine Integer-Zahl!\"<\/span>);\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\">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 wird die Variable, die das <code>Integer<\/code> repr\u00e4sentiert, nicht benannt und somit auch nicht verwendet. Der Code bleibt sauber und es entsteht kein unn\u00f6tiger \u201eNoise\u201c durch ungenutzte Variablen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kombination mit Record Patterns<\/h2>\n\n\n\n<p>Java 16 f\u00fchrte <strong>Records<\/strong> ein, und Java 21\/22 erweitert das Pattern Matching stark, insbesondere durch <strong>Record Patterns<\/strong>. Unnamed Variables lassen sich hier ebenfalls einsetzen. Angenommen, wir haben folgendes Record:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">record<\/span> <span class=\"hljs-selector-tag\">Point<\/span>(<span class=\"hljs-selector-tag\">int<\/span> <span class=\"hljs-selector-tag\">x<\/span>, <span class=\"hljs-selector-tag\">int<\/span> <span class=\"hljs-selector-tag\">y<\/span>) {}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Wenn wir nur den <code>x<\/code>-Wert ben\u00f6tigen, den <code>y<\/code>-Wert aber ignorieren m\u00f6chten, k\u00f6nnen wir <code>_<\/code> verwenden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Point p = <span class=\"hljs-keyword\">new<\/span> Point(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">20<\/span>);\n\n<span class=\"hljs-keyword\">if<\/span> (p <span class=\"hljs-keyword\">instanceof<\/span> Point(int x, _)) {\n    System.out.println(<span class=\"hljs-string\">\"X-Wert: \"<\/span> + x);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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>Hier sehen wir klar, dass nur <code>x<\/code> von Interesse ist, w\u00e4hrend <code>y<\/code> bewusst ignoriert wird. Dies verbessert die Lesbarkeit und signalisiert direkt die Absicht des Entwicklers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung in Switch Expressions<\/h2>\n\n\n\n<p>Ein weiterer spannender Anwendungsfall ist die Kombination von <strong>Unnamed Variables<\/strong> mit <strong>Switch Expressions<\/strong>. Java 22 erlaubt, dass Patterns direkt in <code>switch<\/code> verwendet werden, und nicht ben\u00f6tigte Variablen k\u00f6nnen elegant <code>_<\/code> sein:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">Object<\/span> obj = <span class=\"hljs-keyword\">new<\/span> Point(<span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">15<\/span>);\n\n<span class=\"hljs-built_in\">String<\/span> description = <span class=\"hljs-keyword\">switch<\/span> (obj) {\n    <span class=\"hljs-keyword\">case<\/span> Point(int x, _) -&gt; <span class=\"hljs-string\">\"Punkt auf der X-Achse bei \"<\/span> + x;\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-built_in\">String<\/span> _ -&gt; <span class=\"hljs-string\">\"Es ist ein String\"<\/span>;\n    <span class=\"hljs-keyword\">default<\/span> -&gt; <span class=\"hljs-string\">\"Unbekannter Typ\"<\/span>;\n};\n\nSystem.out.println(description);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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>Hier sehen wir, dass wir den Y-Wert des Punktes nicht interessieren, ebenso wenig der Inhalt des Strings \u2013 die <code>_<\/code>-Notation macht das klar und sauber.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vorteile und Best Practices<\/h2>\n\n\n\n<p>Die Einf\u00fchrung von Unnamed Variables bringt mehrere Vorteile mit sich:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Sauberer Code:<\/strong> Kein unn\u00f6tiges Deklarieren von Variablen, die nicht genutzt werden.<\/li>\n\n\n\n<li><strong>Absicht klar kommuniziert:<\/strong> Leser erkennen sofort, welche Teile eines Patterns relevant sind.<\/li>\n\n\n\n<li><strong>Weniger Compiler-Warnungen:<\/strong> Unbenutzte Variablen f\u00fchren oft zu Warnungen; <code>_<\/code> eliminiert diese.<\/li>\n\n\n\n<li><strong>Kombination mit bestehenden Features:<\/strong> Funktioniert nahtlos mit Record Patterns, Switch Expressions und klassischen instanceof-Pr\u00fcfungen.<\/li>\n<\/ol>\n\n\n\n<p><strong>Best Practices:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verwende <code>_<\/code> nur f\u00fcr Variablen, die wirklich nicht genutzt werden.<\/li>\n\n\n\n<li>Vermeide mehrfaches <code>_<\/code> in derselben Pattern-Kette, wenn dies die Lesbarkeit beeintr\u00e4chtigt.<\/li>\n\n\n\n<li>Kombiniere Unnamed Variables mit Pattern Matching, um den Code so pr\u00e4gnant wie m\u00f6glich zu halten.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ein komplexeres Beispiel<\/h2>\n\n\n\n<p>Nehmen wir an, wir modellieren geometrische Formen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">sealed interface Shape permits Circle, Rectangle {}\n\nrecord Circle(double radius) implements Shape {}\nrecord Rectangle(double width, double height) implements Shape {}\n\nShape shape = <span class=\"hljs-keyword\">new<\/span> Rectangle(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">5<\/span>);\n\n<span class=\"hljs-built_in\">String<\/span> areaDescription = <span class=\"hljs-keyword\">switch<\/span> (shape) {\n    <span class=\"hljs-keyword\">case<\/span> Circle(double r) -&gt; <span class=\"hljs-string\">\"Kreis mit Fl\u00e4che: \"<\/span> + (<span class=\"hljs-built_in\">Math<\/span>.PI * r * r);\n    <span class=\"hljs-keyword\">case<\/span> Rectangle(double w, double h) -&gt; <span class=\"hljs-string\">\"Rechteck mit Fl\u00e4che: \"<\/span> + (w * h);\n    <span class=\"hljs-keyword\">default<\/span> -&gt; <span class=\"hljs-string\">\"Unbekannte Form\"<\/span>;\n};\n\nSystem.out.println(areaDescription);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><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>Wenn wir bei Rechtecken nur die Breite interessieren, k\u00f6nnen wir <code>_<\/code> nutzen:<\/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\">case<\/span> Rectangle(double w, _) -&gt; <span class=\"hljs-string\">\"Rechteckbreite: \"<\/span> + w;\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>Dies reduziert visuelles Rauschen und fokussiert auf die relevanten Daten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Das Feature <strong>Unnamed Variables &amp; Patterns<\/strong> in <strong>Java 22<\/strong> ist ein kleines, aber m\u00e4chtiges Werkzeug, das die Lesbarkeit von Code massiv verbessert. Durch die M\u00f6glichkeit, Variablen gezielt zu ignorieren, entf\u00e4llt unn\u00f6tiger Code, Warnungen werden reduziert und die Intention des Entwicklers wird klar kommuniziert. In Kombination mit den anderen modernen Pattern-Matching-Features von Java \u2013 wie <strong>Record Patterns<\/strong> oder <strong>Switch Expressions<\/strong> \u2013 ergibt sich ein deutlich eleganterer, ausdrucksstarker und wartbarer Code.<\/p>\n\n\n\n<p>F\u00fcr Entwickler, die regelm\u00e4\u00dfig mit komplexen Datentypen arbeiten oder Pattern Matching in Switch-Ausdr\u00fccken einsetzen, ist dies ein besonders wertvolles Feature. Es demonstriert, wie Java weiterhin den Spagat zwischen <strong>starker Typisierung<\/strong> und <strong>ausdrucksstarker Syntax<\/strong> meistert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit der Ver\u00f6ffentlichung von Java 22 hat die Java-Plattform erneut einen bedeutenden Schritt in Richtung moderner Sprachfeatures gemacht. Ein besonders spannendes Feature sind die sogenannten Unnamed Variables &amp; Patterns. Dieses Feature zielt darauf ab, den Code klarer, pr\u00e4gnanter und zugleich lesbarer zu gestalten, insbesondere in Verbindung mit Pattern Matching. In diesem Artikel wollen wir dieses [&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-642","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\/642","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=642"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions"}],"predecessor-version":[{"id":644,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions\/644"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}