1050 Stimmen

Warum kann ich die switch-Anweisung nicht für einen String verwenden?

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?

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=1223179

3 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.

1voto

Iskuskov Alexander Punkte 3532

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 einer yield 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");
    }

1voto

dreamcrash Punkte 40203

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";
    };
}

0voto

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.

-2voto

Conete Cristian Punkte 101

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.com

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.

Powered by:

X