Ошибка компиляции - переключатель с перечислением
Возможный дубликат:
Почему я не могу получить ссылку на константу Enum в ярлыке case?
Привет,
Кто-нибудь знает, почему, когда я переключаю Enum, случаи должны быть на неквалифицированном значении Enum?
Пример:
switch(var) {
case Enum.FIRST:
break;
}
является незаконным
а
switch(var) {
case FIRST:
break;
}
является законным.
Я понимаю, что var имеет определенный тип (Enum), но почему компилятор волнуется, если я использую полное имя значения Enum?
Ответы
Ответ 1
Потому что спецификация языка Java заявляет, что это так.
В частности, определение переключателя SwitchLabel:
SwitchLabel:
case ConstantExpression :
case EnumConstantName :
default :
См. http://java.sun.com/docs/books/jls/third_edition/html/statements.html#258896
Ответ 2
Я предполагаю, потому что иначе вы могли бы сделать что-то вроде этого:
switch(var) {
case AnyOtherEnum.FIRST:
break;
}
Ответ 3
Потому что вы переключаете 'var' уже как "Enum", поэтому в случае Enum.FIRST будет "Enum.Enum.FIRST". Вид, -)