编译错误 - 使用枚举切换

gad*_*ads 14 java compiler-construction enums

可能重复:
为什么我不能在案例标签中获得枚举常量引用?

嗨,有人知道为什么当我切换Enum时,案例应该是不合格的Enum值吗?

例:

switch(var) {

case Enum.FIRST:

break;

}
Run Code Online (Sandbox Code Playgroud)

是非法的

但:

switch(var) {

case FIRST:

break;

}
Run Code Online (Sandbox Code Playgroud)

是合法的.

我知道var是特定类型(Enum),但是如果我使用Enum值的完全限定名称,编译器会关心它?

dev*_*ity 9

因为Java语言规范声明它是如此.

具体来说,SwitchLabel的定义:

SwitchLabel:
        case ConstantExpression :
        case EnumConstantName :
        default :
Run Code Online (Sandbox Code Playgroud)

请参阅http://java.sun.com/docs/books/jls/third_edition/html/statements.html#258896

  • 我必须说,我不是非常有“因为这就是事实”的答案。 (2认同)

Luk*_*der 3

我猜是因为否则你可以做这样的事情:

switch(var) {
  case AnyOtherEnum.FIRST:
  break;
}
Run Code Online (Sandbox Code Playgroud)