为什么我不能将枚举用于 switch-case 语句?
Why can't I use enums for switch-case-statements?
我想将枚举常量用于 switch-case 语句。
我正在使用以下 enum/class:
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:
// ...
}
}
}
问题:
"the case expression must be constant expression" => 我的枚举值不是常量,尽管属性 private final int val
被声明为 final
.
如何将此枚举用于案例陈述?
案例标签必须是编译时常量表达式。方法调用不是其中之一。
你能做的就是把test改成Cons。然后就可以在switch中使用了:
Cons test;
// some code
switch(test) {
case Cons.ONE:
// ...
break;
case Cons.TWO:
// ...
break;
default:
// ...
}
如果您必须使用 int
,请创建一个方法,该方法 returns 使用该值的正确枚举实例。
Cons lookUpByVal(int test) { ... }
switch(lookUpByVal(test)) {
case Cons.ONE:
...
我想将枚举常量用于 switch-case 语句。
我正在使用以下 enum/class:
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:
// ...
}
}
}
问题:
"the case expression must be constant expression" => 我的枚举值不是常量,尽管属性 private final int val
被声明为 final
.
如何将此枚举用于案例陈述?
案例标签必须是编译时常量表达式。方法调用不是其中之一。
你能做的就是把test改成Cons。然后就可以在switch中使用了:
Cons test;
// some code
switch(test) {
case Cons.ONE:
// ...
break;
case Cons.TWO:
// ...
break;
default:
// ...
}
如果您必须使用 int
,请创建一个方法,该方法 returns 使用该值的正确枚举实例。
Cons lookUpByVal(int test) { ... }
switch(lookUpByVal(test)) {
case Cons.ONE:
...