Подтвердить что ты не робот

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

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

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

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

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

4b9b3361