Java 14中的Switch表达式,包含默认情况

5
如何使用新的Java 14 Switch表达式将switch case声明为默认值?
我只需要:
enum States {
    PLAY, STOP
}
...
States state = ...

switch (state) {
    case PLAY -> { run(); }
    case STOP, default -> { stop(); }
}

无法编译。Java 17 Preview 特性可以编译,但这不是解决方案!我真的想避免使用未完成的特性。

它应该等同于旧式的 switch 语句:

switch (state) {
    case PLAY: run(); break;
    case STOP: // <-- No extra "break;". Intentional fall-through!
    default: stop(); break;
}

在纯Java 14(或者也许是17)中是否可能实现这一点?


2
如果你想让 STOP 的行为与 default 相同,那么只需省略 STOP case,它就会成为默认的一部分。 - khelwood
@khelwood 当然是正确的,但没有明确提到它那么表达力强。 - Jan
2
你已经发现它是Java 17(和18)的预览功能 - switch语句模式匹配的一部分 - 因此无法在之前的版本中使用。 - user16320675
1
什么是“状态”?一个“枚举”? - Holger
是的,这是一个枚举。 - Jan
1
那么,如果你不想只写 default ->,因为你想要“尽可能明确地提到它”,为什么不列出所有剩余的情况并省略 default?哦,我明白了,你编辑了问题并添加了定义。所以,根本没有理由使用 default。只需使用 switch (state) { case PLAY -> run(); case STOP -> stop(); } 或者,如果你考虑到枚举类型的潜在修改:switch (state) { case PLAY -> run(); case STOP -> stop(); default -> throw new AssertionError(); } - Holger
1个回答

2
不要认为这是可能的。一个替代方案是在两种情况下都包含stop():
switch (state) {
    case PLAY -> run();
    case STOP -> stop();
    default -> stop();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接