悲しいことに、この構文はサポートされていません。しかし、あなたは、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のパターンマッチングの近くでさらに進んでいくことができます。それが本当に便利になります。私は 'スイッチは'それが "不都合で危険なだけだと思うし、私の控えめな暫定的な実装でさえ問題のいくつかを避けている(" fall-through "なし、デフォルトのケースを扱わなければならない)。 – Landei
フォールスルー防止 - 多分;ただし、デフォルトのケースの処理は、明確な割り当てによってより簡単に実行できます。 –