Twi*_*zzl 5 java enums case-statement switch-statement
我想将枚举常量用于 switch-case-语句。
我正在使用以下枚举/类:
public enum Cons {
ONE(1),
TWO(2);
private final int val;
private Cons(final int newVal) {
val = newVal;
}
public int getVal() {
return val;
}
}
public class Main {
public static void main(String[] args) {
int test;
// some code
switch(test) {
case Cons.ONE.getVal():
// ...
break;
case Cons.TWO.getVal():
// ...
break;
default:
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
“case 表达式必须是常量表达式” => 我的枚举的值不是常量,尽管该属性private final int val声明为final.
我如何使用这个枚举来进行案例陈述?
Case 标签必须是编译时常量表达式。方法调用不是其中之一。
你能做的就是把测试变成缺点。然后你就可以在 switch 中使用它:
Cons test;
// some code
switch(test) {
case Cons.ONE:
// ...
break;
case Cons.TWO:
// ...
break;
default:
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果必须使用int,请创建一个使用该值返回正确枚举实例的方法。
Cons lookUpByVal(int test) { ... }
switch(lookUpByVal(test)) {
case Cons.ONE:
...
Run Code Online (Sandbox Code Playgroud)