-
场景 1:状态 / 类型定义(最常用)
用于固定状态、类型、分类,替代常量,更安全、易读。
// 定义订单状态枚举
enum OrderStatus {
// 枚举常量:固定状态
PENDING, // 待付款
PAID, // 已付款
DELIVERED, // 已发货
COMPLETED, // 已完成
CANCELLED // 已取消
}
public class EnumStateDemo {
public static void main(String[] args) {
// 使用枚举
OrderStatus status = OrderStatus.PAID;
// 判断状态
switch (status) {
case PENDING:
System.out.println("订单待付款");
break;
case PAID:
System.out.println("订单已付款");
break;
case DELIVERED:
System.out.println("订单已发货");
break;
case COMPLETED:
System.out.println("订单已完成");
break;
case CANCELLED:
System.out.println("订单已取消");
break;
default:
System.out.println("未知状态");
}
}
}
enum OrderStatus:定义枚举类,存放固定不变的状态值。- 内部
PENDING、PAID等是枚举实例,全局唯一,不能被随意修改。 - 相比普通
static常量:类型安全、可读性强、防止传入非法值。 - 常配合
switch判断业务状态
- 场景 2:策略模式(替换大量 if/else)
用枚举实现策略,消除臃肿分支,代码更简洁易维护。
// 支付策略枚举:每个枚举对应一种支付逻辑
enum PayStrategy {
// 微信支付
WECHAT_PAY {
@Override
public void pay(double money) {
System.out.println("微信支付:" + money + " 元");
}
},
// 支付宝支付
ALIPAY {
@Override
public void pay(double money) {
System.out.println("支付宝支付:" + money + " 元");
}
},
// 银行卡支付
BANK_CARD {
@Override
public void pay(double money) {
System.out.println("银行卡支付:" + money + " 元");
}
};
// 抽象支付方法
public abstract void pay(double money);
}
public class EnumStrategyDemo {
public static void main(String[] args) {
PayStrategy strategy = PayStrategy.ALIPAY;
strategy.pay(99.9);
}
}
- 枚举中定义抽象方法,每个枚举常量单独实现该方法。
- 不同支付方式对应不同业务逻辑,彻底消除臃肿的 if/else。
- 新增支付方式只需新增一个枚举实例,符合开闭原则,易维护。
-
场景 3:统一返回码(后端接口必备)
统一管理接口响应码、消息,规范后端返回格式。
// 统一接口返回码枚举
enum ResultCode {
SUCCESS(200, "请求成功"),
FAIL(500, "服务器异常"),
PARAM_ERROR(400, "参数错误"),
NO_AUTH(401, "权限不足");
// 成员变量:状态码、提示信息
private final int code;
private final String msg;
// 私有构造方法(枚举构造默认 private)
ResultCode(int code, String msg) {
this.code = code;
this.msg = msg;
}
// getter 方法
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
public class EnumResultDemo {
public static void main(String[] args) {
ResultCode result = ResultCode.SUCCESS;
System.out.println("响应码:" + result.getCode());
System.out.println("提示信息:" + result.getMsg());
}
}
- 枚举携带状态码 + 描述信息,统一项目接口返回规范。
- 枚举构造方法默认私有,外部无法创建新对象,保证编码统一。
- 所有错误码、成功码集中管理,便于前后端对接与后期维护。
