为什么枚举值不能在switch语句中完全限定?

fge*_*fge 21 java enums

(注:编辑问题;先前意图不明确)

考虑以下代码:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常.

但是,如果我更换:

case VALUE1: // or VALUE2
Run Code Online (Sandbox Code Playgroud)

有:

case X.VALUE1: // or X.VALUE2
Run Code Online (Sandbox Code Playgroud)

然后编译器抱怨:

java:/path/to/Foo.java:whatever:枚举开关案例标签必须是枚举常量的非限定名称

SO 建议从JLS的引用中得到答案:

(需要内联常量的一个原因是switch语句在每种情况下都需要常量,并且没有两个这样的常量值可能是相同的.编译器在编译时检查switch语句中的重复常量值;类文件格式不做案例值的象征性联系.)

但这并不能让我满意.就我而言,VALUE1并且X.VALUE1完全一样.引用的文字对我来说根本没有解释.

在JLS中定义语句中的enumswitch是否必须以这种方式写入?

ass*_*ias 10

SwitchLabel期望一个EnumConstantName,它被定义为枚举常量标识符,它是不合格的:

EnumConstant:
Annotations opt Identifier Arguments opt ClassBody opt