9

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

我的每个案例语句都有以下形式:IMyInterface.MyEnum.MyValue,(尽管如果我导入,我可以删除 IMyInterface)。

但是,编译器 (Java 6) 会引发错误:“必须将合格的案例标签 IMyInterface.MyEnum.MyValue 替换为不合格的枚举常量 MyValue”。

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

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

4

2 回答 2

18

来自 JLS:

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

你可以在这里找到它。

于 2009-06-08T15:09:04.357 回答
3

这是一个奇怪的。我不得不做一些挖掘自己来了解这一点。似乎在打开的对象上键入 check 比在完整的限定名称中更安全。

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

于 2009-06-08T14:56:43.323 回答