HomeWork Java枚举类型的三大应用场景
26.4.29
在Java开发中,枚举(Enum)不是简单的“常量集合”,而是一种类型安全、可读性强的工具。今天我们就结合三个最常用的场景,把枚举用透。
场景1:状态/类型定义(最常用)
在订单、用户、流程等场景中,枚举可以完美替代零散的常量,避免魔法值,同时提供类型安全。
示例:订单状态枚举
public enum OrderStatus {
// 定义所有状态
UNPAID(0, "未支付"),
PAID(1, "已支付"),
DELIVERED(2, "已发货"),
FINISHED(3, "已完成"),
CANCELLED(4, "已取消");
private final int code;
private final String desc;
OrderStatus(int code, String desc) {
this.code = code;
this.desc = desc;
}
// 根据code获取枚举
public static OrderStatus getByCode(int code) {
for (OrderStatus status : OrderStatus.values()) {
if (status.code == code) {
return status;
}
}
return null;
}
// getters
public int getCode() { return code; }
public String getDesc() { return desc; }
}
场景2:策略模式(替换大量if/else)
当需要根据不同类型执行不同逻辑时,枚举可以把每个分支的逻辑封装到枚举实例中,彻底消灭if/else。
示例:支付方式策略枚举
public enum PayStrategy {
ALIPAY {
@Override
public void pay(double amount) {
System.out.println("使用支付宝支付:" + amount + "元");
}
},
WECHAT {
@Override
public void pay(double amount) {
System.out.println("使用微信支付:" + amount + "元");
}
},
BANK {
@Override
public void pay(double amount) {
System.out.println("使用银行卡支付:" + amount + "元");
}
};
// 抽象方法,每个枚举实例必须实现
public abstract void pay(double amount);
}
// 调用方式
public class Test {
public static void main(String[] args) {
PayStrategy.ALIPAY.pay(100.0);
PayStrategy.WECHAT.pay(200.0);
}
}
场景3:统一返回码(后端接口必备)
后端接口的返回码、提示信息,用枚举统一管理,避免返回码重复、提示信息不一致的问题。
示例:接口返回码枚举
public enum ResultCode {
SUCCESS(200, "操作成功"),
FAIL(500, "服务器异常"),
PARAM_ERROR(400, "参数错误"),
UNAUTHORIZED(401, "未授权"),
NOT_FOUND(404, "资源不存在");
private final int code;
private final String message;
ResultCode(int code, String message) {
this.code = code;
this.message = message;
}
// getters
public int getCode() { return code; }
public String getMessage() { return message; }
}
// 统一返回结果类
public class Result<T> {
private int code;
private String message;
private T data;
// 快速构建成功/失败结果
public static <T> Result<T> success(T data) {
Result<T> r = new Result<>();
r.setCode(ResultCode.SUCCESS.getCode());
r.setMessage(ResultCode.SUCCESS.getMessage());
r.setData(data);
return r;
}
public static <T> Result<T> fail(ResultCode code) {
Result<T> r = new Result<>();
r.setCode(code.getCode());
r.setMessage(code.getMessage());
return r;
}
// getters and setters
}
枚举的核心优势是类型安全、可读性强、易于维护。开发中遇到状态、策略、返回码这类场景,优先用枚举替代常量和if/else,代码会更干净、更健壮。
更多推荐

所有评论(0)