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

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

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

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

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

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

来自JLS:

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

你可以在这里找到它。

这是一个奇怪的。 我不得不做一些挖掘自己以了解这一点。 看起来打开对象的检查比完全限定名称更安全。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6191812是一个错误报告,允许您指定合格的枚举,但由于您可以在附件中看到的原因,它已关闭且未执行操作。