为什么枚举值不能在 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: 枚举开关大小写标签必须是枚举常量的非限定名称
SO用JLS的这句话提出了一个答案:
(要求内联常量的一个原因是,switch 语句在每种情况下都需要常量,并且没有两个这样的常量值可能相同。编译器在编译时检查 switch 语句中是否存在重复的常量值;类文件格式不执行事例值的符号链接。
但这并不能满足我。就我而言,它们完全相同。引用的文字根本没有为我解释它。VALUE1
X.VALUE1
在JLS中,哪里定义了语句中的值必须以这种方式编写?enum
switch