Почему в инструкциях по переключению Java для перечислений возникает ошибка компиляции, когда я определяю свои значения в каждом случае? - PullRequest
9 голосов
/ 08 июня 2009

У меня есть оператор switch в Java на Enum, который позволяет нам вызывать IMyInterface.MyEnum

Каждое из моих заявлений по делу имеет вид: IMyInterface.MyEnum.MyValue, (хотя я мог бы удалить IMyInterface, если импортировал).

Однако компилятор (Java 6) выдает ошибку: «Надлежащая метка регистра IMyInterface.MyEnum.MyValue должна быть заменена неквалифицированной константой перечисления MyValue».

Я, очевидно, могу это сделать, но я не понимаю, какова цель этой ошибки. Ясно, что если компилятор может иметь дело с фактическим значением, он должен иметь возможность работать с полностью определенным именем так же, как и для констант. На самом деле, я бы предположил, что компилятор превращает константу в полностью определенное имя.

Итак, гуру Java, что за этим стоит? Спасибо!

Ответы [ 2 ]

18 голосов
/ 08 июня 2009

из JLS:

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

Вы можете найти его здесь .

3 голосов
/ 08 июня 2009

Странно. Мне пришлось немного покопаться, чтобы узнать об этом. Кажется, что проверять тип на включаемом объекте безопаснее, чем на полное имя.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6191812 был отчет об ошибке, созданный для того, чтобы вы могли указать квалифицированные перечисления, но он был закрыт и не действовал по причинам, указанным в приложении.

...