一、场景 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省略
}

四、总结

  1. 状态定义:替换魔法值,约束固定业务数据;
  2. 策略枚举:优化多分支 ifelse,策略模式轻量化落地;
  3. 返回码枚举:后端项目标准化接口规范,前后端统一错误约定。

更多推荐