枚举类三大应用场景 - -z-w-h

场景 1:状态 / 类型定义
/**

  • 作业3-场景1:枚举-状态定义 订单状态
    */
    enum OrderStatus {
    UNPAID, // 未支付
    PAID, // 已支付
    DELIVERED, // 已发货
    FINISH, // 已完成
    CANCEL // 已取消
    }

class OrderTest {
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 FINISH -> System.out.println("交易结束");
case CANCEL -> System.out.println("订单关闭");
}
}
}

场景 2:策略模式,消除大量 if-else
/**

  • 作业3-场景2:枚举策略模式 替代if/else 四则运算
    */
    interface Calculate {
    int calc(int a, int b);
    }

enum Operator implements Calculate {
ADD("+") {
@Override
public int calc(int a, int b) {
return a + b;
}
},
SUB("-") {
@Override
public int calc(int a, int b) {
return a - b;
}
},
MUL("*") {
@Override
public int calc(int a, int b) {
return a * b;
}
},
DIV("/") {
@Override
public int calc(int a, int b) {
return a / b;
}
};

private final String symbol;
Operator(String symbol) {
this.symbol = symbol;
}
public String getSymbol() {
return symbol;
}
}

class StrategyTest {
public static void main(String[] args) {
int a = 10, b = 5;
for (Operator op : Operator.values()) {
int res = op.calc(a, b);
System.out.printf("%d %s %d = %d%n", a, op.getSymbol(), b, res);
}
}
}

场景 3:后端统一返回码枚举
/**

  • 作业3-场景3:枚举统一接口返回码(后端开发必备)
    */
    enum ResultCode {
    SUCCESS(200, "操作成功"),
    FAIL(500, "服务器异常"),
    PARAM_ERROR(400, "参数非法"),
    UNAUTHORIZED(401, "未登录"),
    FORBIDDEN(403, "权限不足");

    private final int code;
    private final String msg;

    ResultCode(int code, String msg) {
    this.code = code;
    this.msg = msg;
    }

    // getter
    public int getCode() { return code; }
    public String getMsg() { return msg; }
    }

// 模拟接口返回实体
class Result {
private int code;
private String msg;
private T data;

public static Result ok(T data) {
Result r = new Result<>();
r.code = ResultCode.SUCCESS.getCode();
r.msg = ResultCode.SUCCESS.getMsg();
r.data = data;
return r;
}

public static Result fail(ResultCode code) {
Result r = new Result<>();
r.code = code.getCode();
r.msg = code.getMsg();
return r;
}

@Override
public String toString() {
return "Result{code=" + code + ", msg='" + msg + "', data=" + data + "}";
}
}

class ApiTest {
public static void main(String[] args) {
// 成功返回
System.out.println(Result.ok("用户数据"));
// 参数错误返回
System.out.println(Result.fail(ResultCode.PARAM_ERROR));
}
}