为什么我不能将枚举用于 switch-case-语句?

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.

我如何使用这个枚举来进行案例陈述?

Jon*_*oni 5

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)