为什么在switch语句中不能完全限定枚举值?
(注:编辑过的问题;先前的意图不明确)
考虑以下代码:
public final class Foo{
private enum X
{
VALUE1, VALUE2
}
public static void main(final String... args)
{
final X x = X.VALUE1;
switch (x) {
case VALUE1:
System.out.println(1);
break;
case VALUE2:
System.out.println(2);
}
}
}
此代码可以正常工作。
但是,如果我替换:
case VALUE1: // or VALUE2
与:
case X.VALUE1: // or X.VALUE2
然后编译器抱怨:
java:/path/to/Foo.java:whatever:枚举开关大小写标签必须是枚举常量的非限定名称
(要求内联常量的一个原因是switch语句在每种情况下都需要常量,并且两个这样的常量值可能都不相同。编译器在编译时检查switch语句中是否有重复的常量值;类文件格式不进行案例值的符号链接。)
但这不令我满意。就我而言,VALUE1
并且X.VALUE1
完全一样。引用的文字对我完全没有解释。
在JLS中,哪里定义了必须以这种方式编写语句中的enum
值switch
?
回答:
SwitchLabel
需要一个EnumConstantName
,它被定义为枚举常量标识符,该标识符不合格:
EnumConstant:
注释opt标识符参数opt ClassBody opt
以上是 为什么在switch语句中不能完全限定枚举值? 的全部内容, 来源链接: utcz.com/qa/419610.html