编译错误 – 用枚举切换

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

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

例:

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

是非法的

但:

 switch(var) { case FIRST: break; } 

是合法的。

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

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

具体来说,SwitchLabel的定义:

 SwitchLabel: case ConstantExpression : case EnumConstantName : default : 

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

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

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

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