Java 枚举的 3 个高频业务场景|状态定义 + 策略模式 + 接口统一返回码
一、场景 1:状态 / 类型定义(日常开发最常用)
场景说明
项目中固定有限的业务状态、分类,不再用魔法数字 0/1/2、常量 static final,使用枚举统一管理,可读性强、编译期校验,避免非法参数。比如订单状态:待付款、已付款、已取消、已完成。
// 订单状态枚举
public enum OrderStatusEnum {
WAIT_PAY(1,"待付款"),
PAID(2,"已付款"),
CANCEL(3,"已取消"),
FINISH(4,"已完成");
private final Integer code;
private final String desc;
OrderStatusEnum(Integer code, String desc){
this.code = code;
this.desc = desc;
}
// getter
public Integer getCode(){return code;}
public String getDesc(){return desc;}
// 根据code反向查枚举
public static OrderStatusEnum getByCode(Integer code){
for(OrderStatusEnum status : values()){
if(status.getCode().equals(code)){
return status;
}
}
throw new RuntimeException("不存在的订单状态");
}
}
二、场景 2:枚举实现策略模式,干掉臃肿 if-else
场景说明
多分支业务逻辑(不同类型走不同算法),传统多层if else / switch代码臃肿难维护,把业务逻辑内置枚举实例中,一个枚举对应一套处理策略。举例:不同会员类型折扣计算:普通、白银、黄金、钻石会员。
// 会员折扣策略枚举
public enum MemberLevelEnum {
NORMAL{
@Override
public double calcDiscount(double money) {
return money * 1.0; // 无折扣
}
},
SILVER{
@Override
public double calcDiscount(double money) {
return money * 0.95; //95折
}
},
GOLD{
@Override
public double calcDiscount(double money) {
return money * 0.88; //88折
}
},
DIAMOND{
@Override
public double calcDiscount(double money) {
return money * 0.8; //8折
}
};
// 抽象折扣计算方法
public abstract double calcDiscount(double money);
}
// 调用
public class Test{
public static void main(String[] args) {
double pay = MemberLevelEnum.DIAMOND.calcDiscount(1000);
System.out.println("钻石会员实付:"+pay);
}
}
三、场景 3:后端全局统一接口返回码(企业项目标配)
场景说明
前后端交互时,约定统一错误码 + 提示信息,枚举集中管理所有响应码,规范接口返回格式,是 SpringBoot 后端项目通用写法。
// 全局响应码枚举
public enum ResultCodeEnum {
SUCCESS(200,"请求成功"),
FAIL(500,"服务器异常"),
PARAM_ERROR(400,"参数非法"),
TOKEN_EXPIRE(401,"登录凭证失效,请重新登录"),
DATA_NOT_EXIST(404,"查询数据不存在");
private final Integer code;
private final String msg;
ResultCodeEnum(Integer code,String msg){
this.code = code;
this.msg = msg;
}
// getter
public Integer getCode(){return code;}
public String getMsg(){return msg;}
}
// 统一返回实体(配合枚举使用)
class Result<T>{
private Integer code;
private String msg;
private T data;
// 成功返回
public static <T> Result<T> ok(T data){
Result<T> res = new Result<>();
res.setCode(ResultCodeEnum.SUCCESS.getCode());
res.setMsg(ResultCodeEnum.SUCCESS.getMsg());
res.setData(data);
return res;
}
// 失败返回
public static <T> Result<T> fail(ResultCodeEnum codeEnum){
Result<T> res = new Result<>();
res.setCode(codeEnum.getCode());
res.setMsg(codeEnum.getMsg());
return res;
}
// getter/setter省略
}
四、总结
- 状态定义:替换魔法值,约束固定业务数据;
- 策略枚举:优化多分支 ifelse,策略模式轻量化落地;
- 返回码枚举:后端项目标准化接口规范,前后端统一错误约定。
更多推荐


所有评论(0)