Neuer JEP vorgeschlagen

Switch-Anweisung in Java soll erweitert werden

Hartmut Schlosser

© Shutterstock /ne2pi

Die Einführung von Pattern Matching in einer der nächsten Java-Versionen ist beschlossene Sache. Auf dem Weg dahin wurde jetzt ein neues JEP (Java Enhancement Proposal) vorgeschlagen. Das Ziel: Das existierende Switch-Statement soll überarbeitet werden.

Als Motivation für den neuen JEP „Switch Expressions for the Java Language“ heißt es, dass im Zuge der Einführung des Pattern Matching in Java einige Unregelmäßigkeiten des existierenden Switch Statements, die schon immer für Irritationen gesorgt haben, nun zu echten Showstoppern geworden sind.

Beispielsweise wirft ein Switch Statement eine NullPointerException, wenn das Argument Null ist. Außerdem ist Switch momentan ein Statement, während mehrteilige Bedingungen oft besser via Expressions ausgedrückt werden können.

Geplant ist deshalb die Einführung einer neuen Expression „Switch“ der Form:

T result = switch (arg) {
    case L1 -> e1;
    case L2 -> e2;
    default -> e3;
}

Der Typ des Arguments einer Switch Expression kann jeder der für das switch-Statement als Argument unterstützten Typen sein. Dabei ist der Typ einer Switch Expression selbst sein Zieltyp. Wenn kein Zieltyp vorhanden ist, wird ein eigenständiger Typ durch die Kombination der Typen jedes Arms der Verzweigung abgeleitet. Eine Switch Expression ist zudem ein Polyausdruck; wenn ein Zieltyp vorhanden ist, wird dieser in jeden Arm übergeben.

Ein Beispiel: Oft werden Switch Statements genauso wie If-else-Ketten dazu genutzt, um einer Variablen in jedem Verzweigungsarm einen bestimmten Wert mitzugeben. Solche Anwendungsfälle sollen durch Switch Expressions prägnanter und weniger fehleranfällig werden. Im JEP wird dafür folgendes Beispiel gegeben.

Die untere If-else Kette kann durch die elegantere und schnellere Switch Expression ersetzt werden:


int result = 0;
if (month == 1) {
    if (day == 31) result = 100;
    else result = 200;
} else if (month == 2) {
    if (day == 28) result = 300;
    else result = 400;
} else result = 500;

Die Variante mit Switch Expression:

int result = switch (month) {
    case 1 -> switch (day) { case 31 -> 100; default -> 200; }
    case 2 -> switch (day) { case 28 -> 300; default -> 400; }
    default -> 500;
}

Weitere Ausgestaltungen der neuen Switch Expression sind geplant, beispielweise Blockausdrücke, Lambda-Support und kommaseparierte Listen von Alternativen. In Erwägung wird offenbar auch gezogen, ob Switch Expressions sowie Switch Statements Verzweigungen über bislang nicht unterstützte primitive Typen wie float, double, und long unterstützen sollen.

Der JEP: Switch Expressions for the Java Language ist momentan noch im Stadium des Entwurfs. Die Diskussionen um den Vorschlag werden auf der Mailingliste „amber – dev @ openjdk . java . net“ geführt.

Verwandte Themen:

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Content-Stratege, IT-Redakteur, Storyteller – als Online-Teamlead bei S&S Media ist Hartmut Schlosser immer auf der Suche nach der Geschichte hinter der News. SEO und KPIs isst er zum Frühstück. Satt machen ihn kreative Aktionen, die den Leser bewegen. @hschlosser
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: