有人可以告诉我 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
}
}
尽管 foo 和 bar 一样是最终变量,为什么编译器不接受情况 1?
在我看来,案例 3 的可读性比案例 2 好得多。所以我没有看到新语言结构的好处。
箱子标签必须是编译时间常数。最终参数不是编译时常量;它可能不会因方法的给定调用而变化,但可能会因方法的调用而变化。 (最终实例字段和没有初始化程序的静态最终字段也不是编译时常量。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)