将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语句则需要它。

10-06 01:55