Leider wird diese Syntax nicht unterstützt. Aber könnte man ein solches Verhalten mit Java 8 simulieren:
import java.util.Optional;
import java.util.function.Supplier;
public class Switch {
@SafeVarargs
public static <T, U> Optional<U> of(T value, Case<T, U>... cases) {
for (Case<T, U> c : cases) {
if (value.equals(c.getTestValue())) {
return Optional.of(c.getSupplier().get());
}
}
return Optional.empty();
}
public static <T, U> Case<T, U> when(T testValue, Supplier<U> supplier) {
return new Case<T, U>() {
public T getTestValue() {
return testValue;
}
public Supplier<U> getSupplier() {
return supplier;
}
};
}
public interface Case<T, U> {
Supplier<U> getSupplier();
T getTestValue();
}
}
Verbrauch:
String s = Switch.of(1,
when(0,() -> "zero"),
when(1,() -> "one"),
when(2,() -> "two"))
.orElse("not found");
System.out.println(s);
Natürlich können Sie den Code optimieren Sie Ihre Bedürfnisse anzupassen.
Zoiks. Vielleicht ist diese Lösung etwas schwergewichtig, um ein paar '=' Operatoren zu vermeiden? –
Kommt drauf an. Sie können viel weiter gehen, in der Nähe von Scalas Musterabgleich, dann wird es wirklich nützlich. Ich denke, 'switch'" wie es ist "ist nur unbequem und gefährlich, und selbst meine bescheidene behelfsmäßige Implementierung vermeidet einige der Probleme (kein" Durchfallen ", der Standardfall muss behandelt werden). – Landei
Durchfall verhindern - vielleicht; Die Handhabung des Standardfalls wird jedoch leichter durch eine bestimmte Zuweisung erzwungen. –