将case语句更改为以下代码后,为什么以下代码无法编译
case ENUM1: doSomeStuff();
作品?
public enum EnumType
{
ENUM1, ENUM2, ENUM3;
void doSomeStuff()
{
switch(this)
{
case EnumType.ENUM1: doSomeStuff();
}
}
}
最佳答案
这是为了避免针对不同枚举类型进行比较的能力。将其限制为一种类型(即switch
语句中的枚举值的类型)是有意义的。
更新:实际上是为了保持二进制兼容性。这是JLS的一半chapter 13.4.9的引用:
换句话说,由于EnumType.ENUM1
中的类标识符,它不能被表示为编译时常量表达式,而switch
语句则需要它。