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