枚举类型应用场景
前言
枚举本质是特殊类,用来固定有限、不可变更的常量集合,替代零散定义的静态常量,可读性、类型安全性更强。下面对应PPT三个场景逐一讲解+可运行示例
场景1:状态/类型定义(最常用)
作用
把业务有限状态收拢为枚举,避免随意传字符串/数字导致非法参数,约束取值范围。
示例:订单状态枚举
// 订单状态:仅存在这4种固定状态
enum OrderStatus {
UNPAID,
PAID,
DELIVERED,
FINISHED
}
public class EnumScene1 {
public static void main(String[] args) {
OrderStatus status = OrderStatus.PAID;
switch (status) {
case UNPAID -> System.out.println("待用户付款");
case PAID -> System.out.println("准备安排发货");
case DELIVERED -> System.out.println("物流运输中");
case FINISHED -> System.out.println("订单已结束");
}
}
}
场景2:策略模式,消除大量if/else(例2)
作用
多个分支逻辑封装进枚举内部,消除臃肿if-else/switch,易扩展、代码整洁。
示例:计算器四则运算
// 每个枚举自带运算逻辑,替代一堆if判断
enum CalculateStrategy {
ADD("+") {
@Override
public double calc(double a, double b) {
return a + b;
}
},
SUB("-") {
@Override
public double calc(double a, double b) {
return a - b;
}
},
MUL("*") {
@Override
public double calc(double a, double b) {
return a * b;
}
},
DIV("/") {
@Override
public double calc(double a, double b) {
if(b == 0) throw new ArithmeticException("除数不能为0");
return a / b;
}
};
private final String symbol;
CalculateStrategy(String symbol) {
this.symbol = symbol;
}
public String getSymbol() {
return symbol;
}
public abstract double calc(double a, double b);
}
public class EnumScene2 {
public static void main(String[] args) {
System.out.println(CalculateStrategy.ADD.calc(10, 5));
System.out.println(CalculateStrategy.DIV.calc(20, 4));
}
}
新增运算只需新增枚举实例,不用修改判断分支,符合开闭原则。
场景3:后端接口统一返回码(例3,开发必备)
作用
统一前后端交互错误码、提示文案,规范返回格式,便于全局异常处理。
示例:全局响应码枚举
java
enum ResultCode {
SUCCESS(200, "操作成功"),
FAIL(500, "服务器异常"),
PARAM_ERROR(400, "参数非法"),
UNAUTHORIZED(401, "未登录/权限不足");
private final Integer code;
private final String msg;
ResultCode(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
// getter
public Integer getCode() { return code; }
public String getMsg() { return msg; }
}
class Result
private Integer code;
private String msg;
private T data;
public static
Result
res.code = ResultCode.SUCCESS.getCode();
res.msg = ResultCode.SUCCESS.getMsg();
res.data = data;
return res;
}
public static
Result
res.code = code.getCode();
res.msg = code.getMsg();
return res;
}
}
public class EnumScene3 {
public static void main(String[] args) {
Result
Result

浙公网安备 33010602011771号