{"id":27500,"date":"2022-02-02T11:01:50","date_gmt":"2022-02-02T10:01:50","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=27500"},"modified":"2025-06-12T09:02:33","modified_gmt":"2025-06-12T07:02:33","slug":"switch-expressions","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/java\/switch-expressions\/","title":{"rendered":"Java Switch Expressions"},"content":{"rendered":"\n<p>Switch Expressions wurden in <a href=\"\/de\/java\/java-14-features\/\">Java 14<\/a> im Rahmen von <a rel=\"noopener\" href=\"https:\/\/openjdk.org:443\/projects\/amber\/\" target=\"_blank\">Project Amber<\/a> ver\u00f6ffentlicht.<\/p>\n\n\n\n<p>Bei Switch Expressions handelt es sich eigentlich um zwei Erweiterungen, die unabh\u00e4ngig voneinander, aber auch kombiniert, eingesetzt werden k\u00f6nnen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pfeilnotation ohne <code>break<\/code> und fall-throughs<\/li>\n\n\n\n<li>Verwendung von <code>switch<\/code> als Ausdruck mit R\u00fcckgabewert<\/li>\n<\/ol>\n\n\n\n<p>Schauen wir uns die \u00c4nderungen eine nach der anderen an (ich verwende dazu die Beispiele aus <a href=\"https:\/\/openjdk.org:443\/jeps\/361\" target=\"_blank\" rel=\"noopener\">JEP 361<\/a>, leicht abgewandelt).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"ausgangslage\">Ausgangslage<\/h2>\n\n\n\n<p>Im folgenden Beispiel wird f\u00fcr einen Wochentag die Wortl\u00e4nge ausgegeben. F\u00fcr die letzten beiden F\u00e4lle habe ich den Code etwas komplizierter als n\u00f6tig geschrieben \u2013 um im Folgenden zu demonstrieren, was mit Switch Expressions m\u00f6glich ist.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">switch<\/span> (day) {\n  <span class=\"hljs-keyword\">case<\/span> MONDAY:\n  <span class=\"hljs-keyword\">case<\/span> FRIDAY:\n  <span class=\"hljs-keyword\">case<\/span> SUNDAY:\n    System.out.println(<span class=\"hljs-number\">6<\/span>);\n    <span class=\"hljs-keyword\">break<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> TUESDAY:\n    System.out.println(<span class=\"hljs-number\">7<\/span>);\n    <span class=\"hljs-keyword\">break<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> THURSDAY:\n  <span class=\"hljs-keyword\">case<\/span> SATURDAY:\n    System.out.println((<span class=\"hljs-keyword\">int<\/span>) Math.pow(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>));\n    <span class=\"hljs-keyword\">break<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> WEDNESDAY:\n    <span class=\"hljs-keyword\">int<\/span> three = <span class=\"hljs-number\">1<\/span> + <span class=\"hljs-number\">2<\/span>;\n    System.out.println(three * three);\n    <span class=\"hljs-keyword\">break<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Diese Schreibweise ist zum einen un\u00fcbersichtlich, zum anderen fehleranf\u00e4llig aufgrund der sogenannten \"Fall-Throughs\", also der Ausf\u00fchrungsfortsetzung beim Folgefall, wenn der vorherige nicht mit einem <code>break<\/code>-Statement abgeschlossen wurde.<\/p>\n\n\n\n<p>Entsprechend werden solche Konstrukte auch von den g\u00e4ngigen Tools f\u00fcr statische Code-Analyse (SCA) wie Sonar, Checkstyle und PMD als Code Smells moniert:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1600\" height=\"479\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings.png\" alt=\"Warnungen der statischen Code-Analyse (SCA) bei Switch-Statements ohne break\" class=\"wp-image-24327\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings.png 1600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-224x67.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-336x101.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-504x151.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-672x201.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-400x120.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-600x180.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-800x240.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-944x283.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_fall_through_sca_warnings-1200x359.png 1200w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-element-caption\">Warnungen der statischen Code-Analyse (SCA) bei Switch-Statements ohne break<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"switch-mit-pfeilnotation\">Switch mit Pfeilnotation<\/h2>\n\n\n\n<p>Das folgende Beispiel zeigt, wie du ab Java 14 statt des Doppelpunkts einen Pfeil verwenden kannst. Es gelten dabei folgende Regeln:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vor dem Pfeil darfst du mehrere F\u00e4lle Komma-separiert auflisten. <\/li>\n\n\n\n<li>Nach dem Pfeil darf dann entweder ein einzelnes Code-Statement folgen (Zeilen 2, 3 und 4) oder ein Code-Block in geschweiften Klammern (Zeilen 5 bis 8). <\/li>\n\n\n\n<li>Die <code>break<\/code> Statements fallen in dieser Notation weg.<\/li>\n<\/ul>\n\n\n\n<p>Hier der Beispiel-Code f\u00fcr ein <code>switch<\/code>-Statement in Pfeil-Notation:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">switch<\/span> (day) {\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> MONDAY, FRIDAY, SUNDAY -&gt; System.out.println(<span class=\"hljs-number\">6<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> TUESDAY                -&gt; System.out.println(<span class=\"hljs-number\">7<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> THURSDAY, SATURDAY     -&gt; System.out.println((<span class=\"hljs-keyword\">int<\/span>) Math.pow(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> WEDNESDAY -&gt; {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">int<\/span> three = <span class=\"hljs-number\">1<\/span> + <span class=\"hljs-number\">2<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>    System.out.println(three * three);\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Moderne IDEs wie IntelliJ erkennen das Verbesserungspotenzial und bieten eine automatische Konvertierung in das neue Format an:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"111\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-600x111.png\" alt=\"Automatische Ersetzung von 'switch' Statements\" class=\"wp-image-24331\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-600x111.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-224x41.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-336x62.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-504x93.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-672x124.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-400x74.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-800x147.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced-944x174.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">Automatische Ersetzung von 'switch' Statements<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"convertkit-form wp-block-convertkit-form\" style=\"\"><script async data-uid=\"1427197203\" src=\"https:\/\/happycoders.kit.com\/1427197203\/index.js\" data-jetpack-boost=\"ignore\" data-no-defer=\"1\" data-no-optimize=\"1\" nowprocket><\/script><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"switch-als-ausdruck-mit-rueckgabewert\">Switch als Ausdruck mit R\u00fcckgabewert<\/h2>\n\n\n\n<p>Oft verwenden wir <code>switch<\/code>, um einer Variablen einen Fall-spezifischen Wert zuzuweisen. Im folgenden Beispiel geben wir die L\u00e4nge des Wochentages nicht aus, sondern speichern sie in der Variablen <code>numLetters<\/code>.<\/p>\n\n\n\n<p>(Die letzten zwei F\u00e4lle sind wieder absichtlich umst\u00e4ndlich geschrieben, um zu zeigen, was mit Switch Expressions m\u00f6glich ist.)<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> numLetters;\n<span class=\"hljs-keyword\">switch<\/span> (day) {\n  <span class=\"hljs-keyword\">case<\/span> MONDAY:\n  <span class=\"hljs-keyword\">case<\/span> FRIDAY:\n  <span class=\"hljs-keyword\">case<\/span> SUNDAY:\n    numLetters = <span class=\"hljs-number\">6<\/span>;\n    <span class=\"hljs-keyword\">break<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> TUESDAY:\n    numLetters = <span class=\"hljs-number\">7<\/span>;\n    <span class=\"hljs-keyword\">break<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> THURSDAY:\n  <span class=\"hljs-keyword\">case<\/span> SATURDAY:\n    numLetters = (<span class=\"hljs-keyword\">int<\/span>) Math.pow(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>);\n    <span class=\"hljs-keyword\">break<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> WEDNESDAY:\n    <span class=\"hljs-keyword\">int<\/span> three = <span class=\"hljs-number\">1<\/span> + <span class=\"hljs-number\">2<\/span>;\n    numLetters = three * three;\n    <span class=\"hljs-keyword\">break<\/span>;\n  <span class=\"hljs-keyword\">default<\/span>:\n    <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalStateException(<span class=\"hljs-string\">\"Unknown day: \"<\/span> + day);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Damit wir die Variable im Anschluss verwenden k\u00f6nnen, m\u00fcssen wir bei dieser herk\u00f6mmlichen Schreibweise \u2013 obwohl wir jeden Wochentag abgedeckt haben \u2013 entweder die Variable vorab mit einem Standardwert belegen oder einen <code>default<\/code>-Case angeben. Andernfalls w\u00fcrde der Compiler mit der Fehlermeldung <em>\"Variable 'numLetters' might not have been initialized\"<\/em> abbrechen.<\/p>\n\n\n\n<p>Ab Java 14 k\u00f6nnen wir dieses Statement in einen Ausdruck umwandeln. Dabei geben wir mit dem neuen Keyword <code>yield<\/code> jeweils einen Wert zur\u00fcck. Das Ergebnis des Switch-Ausdrucks weisen wir dann direkt der Variablen zu:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> numLetters = <span class=\"hljs-keyword\">switch<\/span> (day) {\n  <span class=\"hljs-keyword\">case<\/span> MONDAY:\n  <span class=\"hljs-keyword\">case<\/span> FRIDAY:\n  <span class=\"hljs-keyword\">case<\/span> SUNDAY:\n    yield <span class=\"hljs-number\">6<\/span>;\n\n  <span class=\"hljs-keyword\">case<\/span> TUESDAY:\n    yield <span class=\"hljs-number\">7<\/span>;\n\n  <span class=\"hljs-keyword\">case<\/span> THURSDAY:\n  <span class=\"hljs-keyword\">case<\/span> SATURDAY:\n    yield (<span class=\"hljs-keyword\">int<\/span>) Math.pow(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>);\n\n  <span class=\"hljs-keyword\">case<\/span> WEDNESDAY:\n    <span class=\"hljs-keyword\">int<\/span> three = <span class=\"hljs-number\">1<\/span> + <span class=\"hljs-number\">2<\/span>;\n    yield three * three;\n\n  <span class=\"hljs-keyword\">default<\/span>:\n    <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalStateException(<span class=\"hljs-string\">\"Unknown day: \"<\/span> + day);\n};<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><code>yield<\/code> ist ein sogenanntes \"contextual keyword\" und damit nur im Kontext eines <code>switch<\/code>-Ausdrucks von Bedeutung. Falls du <code>yield<\/code> in deinem Quellcode als Variablenname verwendet haben solltest \u2013 keine Sorge, das kannst du weiterhin tun. Selbst so etwas w\u00e4re erlaubt:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><code>int yield = 5; yield yield + yield;<\/code><\/p>\n\n\n\n<p>Der <code>default<\/code>-Case ist hier (im Gegensatz zur herk\u00f6mmlichen Schreibweise) \u00fcbrigens \u00fcberfl\u00fcssig \u2013 mehr dazu im Abschnitt <a href=\"#vollstaendigkeitsanalyse-bei-enums\">Vollst\u00e4ndigkeitsanalyse bei Enums<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"kombination-von-pfeilnotation-und-switch-ausdruck\">Kombination von Pfeilnotation und Switch-Ausdruck<\/h2>\n\n\n\n<p>Deutlich eleganter wird der eben gezeigte Switch-Ausdruck, wenn wir ihn in Pfeilnotation schreiben. Dabei k\u00f6nnen wir den R\u00fcckgabewert<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>direkt hinter den Pfeil schreiben (Zeilen 2 und 3),<\/li>\n\n\n\n<li>als Ausdruck oder Methodenaufruf hinter den Pfeil schreiben (Zeile 4)<\/li>\n\n\n\n<li>oder aus einem Code-Block heraus mit <code>yield<\/code> zur\u00fcckgeben (Zeile 7).<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">int<\/span> numLetters = <span class=\"hljs-keyword\">switch<\/span> (day) {\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> MONDAY, FRIDAY, SUNDAY -&gt; <span class=\"hljs-number\">6<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> TUESDAY                -&gt; <span class=\"hljs-number\">7<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> THURSDAY, SATURDAY     -&gt; (<span class=\"hljs-keyword\">int<\/span>) Math.pow(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">case<\/span> WEDNESDAY              -&gt; {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">int<\/span> three = <span class=\"hljs-number\">1<\/span> + <span class=\"hljs-number\">2<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>    yield three * three;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">default<\/span> -&gt; <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalStateException(<span class=\"hljs-string\">\"Unknown day: \"<\/span> + day);\n<\/span><\/span><span class='shcb-loc'><span>};\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Das komplette Refactoring vom herk\u00f6mmlichen Switch Statement zur Switch Expression mit Pfeilnotation k\u00f6nnen wir unsere IDE erledigen lassen:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"110\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-600x110.png\" alt=\" Automatische Ersetzung von 'switch' Statements durch 'switch' Expressions\" class=\"wp-image-24340\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-600x110.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-224x41.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-336x62.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-504x92.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-672x123.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-400x73.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-800x147.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression-944x173.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_statement_can_be_replaced_with_switch_expression.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\"> Automatische Ersetzung von 'switch' Statements durch 'switch' Expressions<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"vollstaendigkeitsanalyse-bei-enums\">Vollst\u00e4ndigkeitsanalyse bei Enums<\/h2>\n\n\n\n<p>Da es sich bei der Variablen <code>day<\/code> um ein Enum handelt, kann der Compiler erkennen, dass wir alle F\u00e4lle abgedeckt haben. Somit darf der <code>default<\/code>-Case wegfallen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> numLetters = <span class=\"hljs-keyword\">switch<\/span> (day) {\n  <span class=\"hljs-keyword\">case<\/span> MONDAY, FRIDAY, SUNDAY -&gt; <span class=\"hljs-number\">6<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> TUESDAY                -&gt; <span class=\"hljs-number\">7<\/span>;\n  <span class=\"hljs-keyword\">case<\/span> THURSDAY, SATURDAY     -&gt; (<span class=\"hljs-keyword\">int<\/span>) Math.pow(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>);\n  <span class=\"hljs-keyword\">case<\/span> WEDNESDAY              -&gt; {\n    <span class=\"hljs-keyword\">int<\/span> three = <span class=\"hljs-number\">1<\/span> + <span class=\"hljs-number\">2<\/span>;\n    yield three * three;\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\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Auch das erledigt unsere IDE gerne f\u00fcr uns:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"84\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-600x84.png\" alt=\"Automatische Entfernung des 'default'-Falls\" class=\"wp-image-24342\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-600x84.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-224x31.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-336x47.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-504x71.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-672x94.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-400x56.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-800x112.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch-944x132.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_remove_default_branch.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">Automatische Entfernung des 'default'-Falls<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Die Schreibweise ohne <code>default<\/code>-Fall ist nicht nur k\u00fcrzer, sondern hilft uns auch bei zuk\u00fcnftigen Erweiterungen des Enums. Sollten wir dieses \u2013 z. B. um einen <code>NEWDAY<\/code> \u2013 erweitern, wird der Compiler uns mitteilen, dass der Switch-Ausdruck nun unvollst\u00e4ndig ist:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"124\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-600x124.png\" alt=\"Unvollst\u00e4ndige 'switch' Expression\" class=\"wp-image-24348\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-600x124.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-224x46.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-336x69.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-504x104.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-672x139.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-400x83.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-800x165.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values-944x195.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2021\/11\/switch_expression_does_not_cover_all_possible_input_values.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">Unvollst\u00e4ndige 'switch' Expression<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Switch-Ausdr\u00fccke k\u00f6nnen unseren Code also auch robuster machen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"fazit\">Fazit<\/h2>\n\n\n\n<p>Switch Expressions sind ein m\u00e4chtiges Werkzeug. Die Pfeilnotation und die Verwendung als Ausdruck mit R\u00fcckgabewert erlauben eine deutlich kompaktere, \u00fcbersichtlichere und weniger fehleranf\u00e4llige Schreibweise als bisher.<\/p>\n\n\n\n<p>Switch Expressions wurden erstmals in <a href=\"\/de\/java\/java-12-features\/#Switch_Expressions_Preview\">Java 12<\/a> als Preview-Feature vorgestellt. Im zweiten Preview in <a href=\"\/de\/java\/java-13-features\/#Switch_Expressions_Second_Preview\">Java 13<\/a> wurde das urspr\u00fcnglich zur R\u00fcckgabe von Werten verwendete Keyword <code>break<\/code> durch <code>yield<\/code> ersetzt. Mit <a rel=\"noopener\" href=\"https:\/\/openjdk.org:443\/jeps\/361\" target=\"_blank\">JDK Enhancement Proposal 361<\/a> wurden Switch Expressions in <a href=\"\/de\/java\/java-14-features\/\">Java 14<\/a> ohne weitere \u00c4nderungen als finales Feature ver\u00f6ffentlicht.<\/p>\n\n\n\n<p>Hinterlasse mir einen Kommentar: Hattest du bereits Gelegenheit die neuen Switch Expressions einzusetzen? Wenn ja, wie gefallen sie dir. Wenn nein, warum nicht?<\/p>\n<aside><p>Wenn dir der Artikel weitergeholfen hat, w\u00fcrde ich mich sehr \u00fcber eine positive Bewertung auf meinem <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">ProvenExpert-Profil<\/a> freuen. Dein Feedback hilft mir, meine Inhalte weiter zu verbessern und motiviert mich, neue informative Artikel zu schreiben.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">Bewertung abgeben<\/a><\/p>\r\n                        <p>Du m\u00f6chtest \u00fcber alle neue Java-Features auf dem Laufenden sein? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders-Newsletter anzumelden.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"#\" data-formkit-toggle=\"d8ee997126\">Newsletter-Anmeldung<\/a><\/p><\/aside>","protected":false},"excerpt":{"rendered":"<p>Switch Expressions wurden in Java 14 ver\u00f6ffentlicht. Dieser Artikel zeigt, wie die Pfeilnotation und die Verwendung als Ausdruck mit R\u00fcckgabewert eine deutlich kompaktere, \u00fcbersichtlichere und weniger fehleranf\u00e4llige Schreibweise als bisher erm\u00f6glicht.<\/p>\n","protected":false},"author":1,"featured_media":34355,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Switch Expressions ab Java 14: Kompakt durch Pfeilnotation ohne 'break' - Ausdruck mit R\u00fcckgabewert per 'yield' - Vollst\u00e4ndigkeitsanalyse mit Enums.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"none","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"switch expression,switch expressions,java switch expression,switch-ausdruck","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[{"_seopress_pro_rich_snippets_type":"none"}],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":7006,"_post_count":0,"footnotes":""},"categories":[64],"tags":[179],"class_list":["post-27500","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java-amber-de"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/switch-expressions-java.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Switch Expressions wurden in Java 14 ver\u00f6ffentlicht. Dieser Artikel zeigt, wie die Pfeilnotation und die Verwendung als Ausdruck mit R\u00fcckgabewert eine deutlich kompaktere, \u00fcbersichtlichere und weniger fehleranf\u00e4llige Schreibweise als bisher erm\u00f6glicht.","public_identification_id":"28ab6c15c8ff45de86f05c22bf7e7b81","private_identification_id":"ce16d1dbda04478496b56478eae90bd0","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/27500","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=27500"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/27500\/revisions"}],"predecessor-version":[{"id":52466,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/27500\/revisions\/52466"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/34355"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=27500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=27500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=27500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}