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

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

我的每个case语句都具有以下形式:

IMyInterface.MyEnum.MyValue,(尽管如果导入,我可以删除IMyInterface)。

但是,编译器(Java 6)引发错误:

"合格的大小写标签IMyInterface.MyEnum.MyValue必须替换为未量化的枚举常量MyValue"。

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

那么,Java专家,这背后的原理是什么?

谢谢!

就我个人而言,我不介意枚举不能在开关盒中使用。 它使代码更具可读性。 请记住,对于您拥有的枚举类(可以编辑的代码),最佳实践是永远不要使用switch-case块。 在这种情况下,枚举特定于常量的方法比switch-case更易于维护,并且不那么脆弱。

从JLS:

(One reason for requiring inlining of constants is that switch statements require constants on each case, and no two such constant values may be the same. The compiler checks for duplicate constant values in a switch statement at compile time; the class file format does not do symbolic linkage of case values.)

你可以在这里找到它。

您是怎么找到那一点的? +1用于在大海捞针中寻找针头。

大声笑,我回想起曾经读过的一些东西……幸运的是,正是在这种情况下,我的桌面上有JLS PDF;)

我喜欢它(所以我要做的就是打开一个新选项卡并键入JLS),但是我仍然找不到任何相关的东西。 我想我没有认为二进制兼容性是可能的原因。

我的上帝... + 1(和道具)细节。

真奇怪。 我不得不做一些自己的事情才能发现这一点。 似乎在打开的对象上键入check比使用全限定名称更安全。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6191812是一个错误报告,允许您指定合格的枚举,但由于您在机箱中看到的原因,它已关闭且未采取任何措施。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值