К сожалению, этот синтаксис не поддерживается. Но вы могли бы имитировать такое поведение с Java 8:
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();
}
}
Использование:
String s = Switch.of(1,
when(0,() -> "zero"),
when(1,() -> "one"),
when(2,() -> "two"))
.orElse("not found");
System.out.println(s);
Конечно, вы можете подправить код, чтобы соответствовать вашим потребностям.
Zoiks. Возможно, это решение немного на стороне тяжеловеса, чтобы избежать нескольких '=' операторов? –
Всё зависит. Вы можете пойти гораздо дальше, близко к сопоставлению шаблонов Scala, тогда это станет действительно полезным. Я думаю, что «переключатель» «как есть» просто неудобен и опасен, и даже моя скромная импровизированная реализация позволяет избежать некоторых проблем (без «провалов», необходимо обработать случай по умолчанию). – Landei
Предотвращение падения - возможно; Тем не менее, обработка случая по умолчанию легче выполняется определенным назначением. –