【发布时间】:2013-05-02 13:02:48
【问题描述】:
有没有办法将枚举转换为常量表达式? 我希望我的 switch 运算符在枚举的值中进行选择,但是我得到了一个编译错误“case 表达式必须是常量表达式”,所以我尝试在变量中声明它:
final int REG = MyEnum.REG.getIndex().intValue();
switch (service.getIndex()) {
case REG:
但我仍然遇到同样的错误。根据甲骨文的文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28
编译时常量表达式是表示值的表达式 原始类型或不突然完成的字符串 仅使用以下内容组成:
•原始类型的文字和字符串类型的文字
所以它不起作用,因为我没有使用文字。我想我必须将其声明为:
final int REG = 8;
但最好将它链接到枚举。有没有办法做到这一点?
编辑
原来我不需要使用任何最终变量。就这么简单:
switch (service) {
case REG:
直到我看到 Andrea 的评论,我才想到。感谢您的回答。
【问题讨论】:
-
我假设
service.getIndex()返回Integer,对吧?您可以修改它以使其返回您的枚举吗? -
在 Java 1.6 之前,您不能在
switch-case中使用String,但您可以在 Java 7 中使用它。仅供参考
标签: java compile-time-constant