Jetzt ist es möglich, einen Schalter mit anderer Switch zu erstellen. Diese Funktion wurde als Vorschlag in Java 12 eingeführt und ist jetzt als Vorschaufunktion in Java 13 verfügbar.
Anforderungen
Sie müssen den Befehl "--enable-preview" in den Projekteigenschaften Ihrer IDE aktivieren oder hinzufügen.
Neben dem üblichen Weg, einen Switch in Java zu erstellen. Können Sie nun einen Pfeil und eine Ausgabe für Ihre Switch-Fälle verwenden. Sie können aber auch den Rückgabewert von einem Switch-Case zu einer Variablen verwenden.
Switch-Case mit Pfeilen
Wenn Sie einen Pfeil anstelle eines doppelten Punktes ":" verwenden, dann müssen Sie nicht in jedem Switch-Fall einen "break" hinzufügen, um ein Durchfallen durch Ihre Switch-Cases zu vermeiden.
char letter = 'b';
switch (letter) {
case 'a' -> System.out.println("This is the letter a");
case 'b' -> System.out.println("This is the letter b");
case 'c' -> System.out.println("This is the letter c");
case 'd' -> System.out.println("This is the letter d");
default -> System.out.println("This is a letter other than a, b, c or d");
}
Wenn die Variable "letter" den Wert "b" hat, dann wird nur der Fall 2 mit der Ausgabe "This is the letter b" angezeigt. Sie brauchen in diesem Fall keine "Pause" zu machen.
Hinweis: Es ist nicht möglich, einen Doppelpunkt und einen Pfeil in einem solchen Switch zu verwenden:
switch (letter) {
case 'a' : System.out.println("This is the letter a");
case 'b' -> System.out.println("This is the letter b");
case 'c' : System.out.println("This is the letter c");
case 'd' -> System.out.println("This is the letter d");
default -> System.out.println("This is a letter other than a, b, c or d");
}
Sie werden einen Compiler-Fehler erhalten, wenn Sie dies tun.
Yield
Die Funktion "yield" kann in einer Switch-Anweisung verwendet werden, um einen Wert in einem Switch-Fall an eine Variable zurückzugeben.
char letter = 'c';
char selectedLetter = switch (letter) {
case 'a' -> {
System.out.println("This is 'a'.");
yield 'a';
}
case 'b' -> {
System.out.println("This is 'b'");
yield 'b';
}
case 'c' -> {
System.out.println("This is 'c'");
yield 'c';
}
case 'd' -> {
System.out.println("This is 'd'");
yield 'd';
}
default -> {
System.out.println("This is a letter other than a, b, c or d");
yield Character.toUpperCase(letter);
}
};
Die Ausgabe " This is 'c' " wird angezeigt und das Zeichen "c" wird in der Variable "selectedLetter" gespeichert.
Sie müssen sich darüber im Klaren sein, dass das Wort "yield" in den Switch-Anweisungen von nun an ein reserviertes Wort ist. Sie können aber immer noch "yield" als Funktionsnamen verwenden, wenn Sie es nach der Klasse aufrufen, in der es definiert wurde.
Verwendung unterschiedlicher Datentypen als Rückgabewert in Switch-Fällen
Sie können auch verschiedene Datentypen (wie String, Char, Integer) in Ihren Switch-Fällen Ihres Switch verwenden, wenn Sie ein variables Objekt "var" deklarieren:
char letter = 'c';
var selectedValue = switch (letter) {
case 'a' -> 'a';
case 'b' -> 2;
case 'c' -> 3.33;
case 'd' -> "This is 'd'";
default -> "This is a letter other than a, b, c or d";
};
Wenn Sie das tun, dann erhalten Sie ein Java-Objekt, das keiner der Datentypen ist, die in den Switch-Fällen verwendet werden.
Stattdessen erzeugt der Compiler ein Java-Objekt ("Type Inference"), das die Datentypen (die in den Switch-Fällen verwendet werden) umfasst und die Schnittstellen "Serializable", "Comparable", "Constable" und
"ConstantDesc" implementiert.
Wenn Sie mehr über Java 13 und den erweiterten Switch wissen wollen, dann schauen Sie bitte unter folgenden Links nach.
Java 13:
https://openjdk.java.net/projects/jdk/13/
Enhanced Switch:
https://openjdk.java.net/jeps/354
var:
https://openjdk.java.net/projects/amber/LVTIFAQ.html
OpenJDK 13 Download:
https://jdk.java.net/13/
JDK 13 Download:
https://www.oracle.com/java/technologies/javase-jdk13-downloads.html