开发者社区> 问答> 正文

为什么我不能在开关案例中使用枚举?

我想将enum-constants用于switch-case-statement。

我正在使用以下枚举/类:

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:
        // ...
}

} }

问题: “案例表达式必须是常量表达式” =>尽管属性private final int val声明为,但我的枚举的值不是常量final。

如何将这个枚举用于案例陈述?


问题来源:stackoverflow

展开
收起
七天一失眠 2020-03-28 11:20:34 822 0
1 条回答
写回答
取消 提交回答
  • 做一个优秀的阿里云志愿者

    大小写标签必须是编译时常数表达式。方法调用不是其中之一。

    您可以做的就是将测试更改为缺点。然后可以在开关中使用它:

    Cons test;
    
    // some code
    
    switch(test) {
        case Cons.ONE:
            // ...
            break;
        case Cons.TWO: 
            // ...
            break;
        default:
            // ...
    }
    
    

    如果必须使用int,请创建一个使用该值返回正确的枚举实例的方法。

    Cons lookUpByVal(int test) { ... }

    switch(lookUpByVal(test)) { case Cons.ONE: ...

     ----
    

    答案来源:stackoverflow

    2020-03-28 11:21:02
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载