当前位置:   article > 正文

Java中,使用switch条件控制语句,case为枚举常量时报 Constant expression required 错误_java switch case值能为枚举值吗

java switch case值能为枚举值吗

问题描述:

日常搬砖时,遇到这么一个需求:
接口接收数据带有status状态,接口对应的值有1,2,3,4…60。现在需要将status中的3,5,6,8转换为1,2,3,4做一些判断,并存储到另一张表中。
由于数据接收必须全部使用实体接收,公司代码检查较为严格不允许魔法值出现,同时为了维护方便,现在需要使用枚举作为switch-case分支条件。但是常规写法在Java8的编译器将会报错。报错如下:
编译器报错


解决方案:

直接上代码:
定义枚举常量时,新增方法‘getByCode()’’遍历枚举所有常量。

public enum TransactionTypeEnum {

        /** 用户充值 */
        SETTLE_ACCOUNTS(3),
        /** 结算付款(用户缴费结算缴费离场) */
        ORDER_FEE_DEDUCTION(5),
        /** 用户补缴 */
        INSPECTOR_PAYBACK(6),
        ...
        ...
        ;

        @Getter
        private int code;

        public static TransactionTypeEnum getByCode(Integer code) {
            for (TransactionTypeEnum e: TransactionTypeEnum.values()) {
                if (e.getCode() == code) {
                    return e;
                }
            }
            return null;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

使用switch时,将要判断的值status传入getByCode中得到枚举类型TransactionTypeEnum 。在switch中判断此枚举TransactionTypeEnum ,case中直接使用枚举常量名。

    TransactionTypeEnum transactionTypeEnum = TransactionTypeEnum.getByCode(status);
    switch (transactionTypeEnum){
        case SETTLE_ACCOUNTS :
            System.out.println("进入第一个case");
            break;
        case ORDER_FEE_DEDUCTION:
            System.out.println("进入第二个case");
            break;
        case INSPECTOR_PAYBACK:
            System.out.println("进入第三个case");
            break;
        default:
            return;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这样就能做到使用枚举常量作为case的参数了,其他在case中使用枚举常量的场景也可使用此方法~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/729091
推荐阅读
相关标签
  

闽ICP备14008679号