Java switch case 枚举enum报错:case expressions must be constant expressions

本文探讨了Java中枚举类型与switch语句结合使用的常见问题。通过具体示例介绍了如何正确地在switch语句中使用枚举常量,并解释了相关错误信息的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 问题描述

    今天在代码中想对Java switch case 和枚举类型Enum对象进行联合使用,但发现有Eclipse中异常提示信息:case expressions must be constant expressions,导致编译始终过不去。

 

    枚举类型定义如下:

 

 

 public enum TradeStatus {
        CLOSE(-1, "已关闭"), NO_TRADE(0, "未创建"), CREATE(1, "拍下"), PAY(2, "已付款"), SHIP(3, "已发货"), SUCCESS(4, "已完成");

        private int value;
        private String name;

        private TradeStatus(int value, String name) {
            this.setValue(value);
            this.setName(name);
        }

        public int getValue() {
            return value;
        }

        public void setValue(int value) {
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public static TradeStatus getByValue(int value) {
            for (TradeStatus tradeStatus : values()) {
                if (tradeStatus.getValue() == value) {
                    return tradeStatus;
                }
            }
            return null;
        }
    }

 

 

   使用代码入下:

 

 

private String getStatusDesc(Integer tradeStatus) {
        switch(tradeStatus){
        case TradeStatus.CREATE.getValue() : 
            break;
        default:
            break;
        }
        return "交易状态";
    }

 

 

     2. 原因分析

 

       本意是想对tradeStatus值进行分类过滤,但由于 TradeStatus.CREATE.getValue() 返回值是一个变量不符合Java switch case的语法,导致报错。

      接下来修改了代码,如下:

 

 

private String getStatusDesc(Integer tradeStatus) {
        switch (TradeStatus.getByValue(tradeStatus)) {
        case OrderInfoSearchDO.TradeStatus.CREATE:
            break;
        default:
            break;
        }
        return "交易状态";
    }

         但Eclipse继续提示错误信息:The qualified case label TradeStatus.CREATE must be replaced with the unqualified enum constant CREATE。。。

百思不得其解。

 

3. 问题解决

 

    把枚举常量前的冗余类信息去掉即可,如下所示:

 

private String getStatusDesc(Integer tradeStatus) {
        switch (TradeStatus.getByValue(tradeStatus)) {
        case CREATE:
            break;
        default:
            break;
        }
        return "交易状态";
    }

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值