编译错误 - 带枚举的开关

2022-09-04 21:45:37

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

嗨,有人知道为什么当我切换枚举时,情况应该在不合格的枚举值上吗?

例:

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;
}