编译错误 – 用枚举切换
可能重复:
为什么我得到的枚举常量引用不能在案例标签中合格?
嗨,有人知道为什么当我切换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”。 的种类 ;-)