在枚举上的Java switch语句中,为什么在每种情况下限定我的值时都会出现编译错误?

Uri*_*Uri 9 java enums switch-statement

我在Java上有一个switch语句,在Enum上我们可以调用IMyInterface.MyEnum

我的每个case语句都有以下形式:IMyInterface.MyEnum.MyValue,(虽然我可以在导入时删除IMyInterface).

但是,编译器(Java 6)会抛出一个错误:"必须用unqalified枚举常量MyValue替换合格的case标签IMyInterface.MyEnum.MyValue".

我显然可以这样做,但对于我的生活,我不明白这个错误的目的是什么.显然,如果编译器可以处理实际值,它应该能够处理完全限定名称,就像它对常量一样.实际上,我会假设编译器将常量转换为完全限定名.

那么,Java大师们,这背后的理由是什么?谢谢!

lag*_*neb 18

来自JLS:

(需要内联常量的一个原因是switch语句在每种情况下都需要常量,并且没有两个这样的常量值可能是相同的.编译器在编译时检查switch语句中的重复常量值;类文件格式不做案例值的象征性联系.)

你可以在这里找到它.