编译错误 - 使用枚举切换

时间:2011-04-05 12:10:49

标签: java compiler-construction enums

  

可能重复:
  Why do I get an Enum constant reference cannot be qualified in a case label?

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

示例:

switch(var) {

case Enum.FIRST:

break;

}

是非法的

但:

switch(var) {

case FIRST:

break;

}

是合法的。

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

3 个答案:

答案 0 :(得分:9)

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

具体来说,SwitchLabel的定义:

SwitchLabel:
        case ConstantExpression :
        case EnumConstantName :
        default :

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

答案 1 :(得分:3)

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

switch(var) {
  case AnyOtherEnum.FIRST:
  break;
}

答案 2 :(得分:0)

因为您正在将'var'切换为“Enum”,所以Enum.FIRST的情况将是“Enum.Enum.FIRST”。种类; - )