[Java] Constant expression required

在switch-case语句中,case后提示“Constant expression required” – 需要常量表达式。

GradeEnum.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;

/**
 * @author lizh
 * @date 2020/6/29
 */
@Data
@AllArgsConstructor
@Getter
public enum GradeEnum {
    GRADE_ONE(1, "小学一年级"),
    GRADE_TWO(2, "小学二年级"),
    GRADE_THREE(3, "小学三年级"),
    GRADE_FOUR(4, "小学四年级"),
    ;

    private Integer code;
    private String desc;
}

SwitchCaseTest.java

/**
 * @author lizh
 * @date 2020/6/29
 */
public class SwitchCaseTest {
    public void deal(Integer grade) {
        switch (grade) {
            case GradeEnum.GRADE_ONE.getCode(): // 这里提示:Constant expression required
                // do something
                break;
            default:
                // do something
                break;
        }
    }
}

对于case语句,在编译期间就要确定值,这里GradeEnum.GRADE_ONE.getCode() 在运行期才能确定值。

修改方案:case 后使用枚举常量。
在枚举类中增加方法:

public enum GradeEnum {
    // 忽略部分代码

    public static GradeEnum getGradeEnumByCode(Integer code) {
        for (GradeEnum gradeEnum : GradeEnum.values()) {
            if (gradeEnum.getCode().equals(code)) {
                return gradeEnum;
            }
        }
        return null;
    }
}

switch-case语句修改为:

    public void deal(Integer grade) {
        GradeEnum gradeEnum = GradeEnum.getGradeEnumByCode(grade);
        if (gradeEnum == null) {
            // do something
        } else {
            switch (gradeEnum) {
                case GRADE_ONE:
                    // do something
                    break;
                default:
                    // do something
                    break;
            }
        }
    }
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值