为什么在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中,哪里定义了必须以这种方式编写语句中的enumswitch

回答:

SwitchLabel需要一个EnumConstantName,它被定义为枚举常量标识符,该标识符不合格:

EnumConstant:

注释opt标识符参数opt ClassBody opt

以上是 为什么在switch语句中不能完全限定枚举值? 的全部内容, 来源链接: utcz.com/qa/419610.html

回到顶部