Почему нельзя перечислить значение перечисления в операторе 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:whwhat: метка регистра переключателя перечисления должна быть безусловным именем константы перечисления

ТАКпредлагает ответ с этой цитатой из JLS:

(Одна из причин, по которой требуется встраивание констант, заключается в том, что операторам switch требуются константы в каждом случае, и никакие два таких значения констант не могут быть одинаковыми. Компилятор проверяет наличие дублирующихся значений констант в операторе switch во время компиляции; формат файла класса не сделать символическую связь значений регистра.)

Но это меня не удовлетворяет. Насколько я понимаю,VALUE1 а такжеX.VALUE1 точно так же. Цитируемый текст для меня совсем не объясняет.

Где в JLS определено, чтоenum значения вswitch заявления должны быть написаны таким образом?

Ответы на вопрос(1)

Ваш ответ на вопрос