Jot*_*otA 2 java switch-statement constant-expression java-17
有人可以告诉我 Java 17 接受最终表达式作为 switch-case-constructs 中的 case 表达式但不接受最终表达式作为参数传递的好处吗?
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
}
}
Run Code Online (Sandbox Code Playgroud)
尽管 foo 和 bar 一样是最终变量,为什么编译器不接受情况 1?
在我看来,案例 3 的可读性比案例 2 好得多。所以我没有看到新语言结构的好处。
Bri*_*etz 12
Case 标签必须是编译时常量。最终参数不是编译时常量;它可能不会因方法的给定调用而变化,但可能会因方法的调用而变化。(最终实例字段和没有初始化程序的静态最终字段也不是编译时常量。)
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |