有人能告诉我 Java 17 接受 final 表达式作为 switch-case-constructs 中的 case 表达式但不接受 final 表达式作为参数传递的好处吗?
void test(int distinction, final int foo) {
final var bar = 2;
switch (distinction) {
case foo -> doSomething(); // does not compile -> case expressions must be constant expressions
case bar -> doSomething(); // does compile
case 3 -> doOtherThings(); // does compile
}
}
为什么编译器不接受案例 1,尽管 foo 和 bar 一样是最终变量?
在我看来,案例 3 的可读性比案例 2 好得多。所以我看不到新语言结构的好处。