Wird diese Funktion in einer späteren Java-Version enthalten sein?
Kann mir jemand erklären, warum ich das nicht tun kann, d.h. die technische Art und Weise, wie Java's switch
Aussage funktioniert?
Wird diese Funktion in einer späteren Java-Version enthalten sein?
Kann mir jemand erklären, warum ich das nicht tun kann, d.h. die technische Art und Weise, wie Java's switch
Aussage funktioniert?
JEP 354: Switch-Ausdrücke (Vorschau) in JDK-13 und JEP 361: Schalterausdrücke (Standard) in JDK-14 wird die Switch-Anweisung und kann somit als Ausdruck .
Jetzt können Sie das:
Variable direkt zuweisen von Schalterausdruck ,
neue Form der Schalterbeschriftung verwenden ( case L ->
):
Der Code rechts von einem "case L ->"-Switch-Label darf nur ein Ausdruck, ein Block oder (der Einfachheit halber) eine throw-Anweisung sein.
mehrere Konstanten pro Fall verwenden, die durch Kommas getrennt sind,
und es gibt auch keine Werte mehr bricht :
Um einen Wert aus einem Schalterausdruck zu erhalten, muss die
break
mit Wertanweisung entfällt zugunsten eineryield
Erklärung.
Also die Demo aus den Antworten ( 1 , 2 ) könnte folgendermaßen aussehen:
public static void main(String[] args) {
switch (args[0]) {
case "Monday", "Tuesday", "Wednesday" -> System.out.println("boring");
case "Thursday" -> System.out.println("getting better");
case "Friday", "Saturday", "Sunday" -> System.out.println("much better");
}
Die technischen Einzelheiten werden in diesem Artikel gut erklärt Antwort . Ich wollte nur hinzufügen, dass mit Java 12 Schaltausdrücke können Sie dies mit der folgenden Syntax tun:
String translation(String cat_language) {
return switch (cat_language) {
case "miau miau" -> "I am to run";
case "miauuuh" -> "I am to sleep";
case "mi...au?" -> "leave me alone";
default -> "eat";
};
}
In Java 11+ ist dies auch mit Variablen möglich. Die einzige Bedingung ist, dass es eine Konstante sein muss.
Zum Beispiel:
final String LEFT = "left";
final String RIGHT = "right";
final String UP = "up";
final String DOWN = "down";
String var = ...;
switch (var) {
case LEFT:
case RIGHT:
case DOWN:
default:
return 0;
}
PS. Ich habe dies nicht mit früheren jdks ausprobiert. Bitte aktualisieren Sie also die Antwort, wenn es auch dort unterstützt wird.
Nicht sehr schön, aber hier ist ein anderer Weg für Java 6 und höher:
String runFct =
queryType.equals("eq") ? "method1":
queryType.equals("L_L")? "method2":
queryType.equals("L_R")? "method3":
queryType.equals("L_LR")? "method4":
"method5";
Method m = this.getClass().getMethod(runFct);
m.invoke(this);
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
203 Stimmen
Es ist in SE 7. 16 Jahre nach seinem Antrag. download.oracle.com/javase/tutorial/java/nutsandbolts/
88 Stimmen
Sun war ehrlich in ihrer Bewertung:
"Don't hold your breath."
lol, bugs.sun.com/bugdatabase/view_bug.do?bug_id=12231793 Stimmen
@raffian Ich glaube, das liegt daran, dass sie zweimal 'seufzte'. Sie waren auch ein bisschen spät dran mit ihrer Antwort, nach fast 10 Jahren. Vielleicht hat sie damals Lunchpakete für ihre Enkelkinder gepackt.