Java枚举类型的三大应用场景
·
场景1:状态/类型定义
public class Main {
public enum OrderStatus {
PENDING_PAYMENT(0, "待支付"),
PAID(1, "已支付"),
SHIPPED(2, "已发货"),
COMPLETED(3, "已完成"),
CANCELLED(4, "已取消");
private final int code;
private final String description;
OrderStatus(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() { return code; }
public String getDescription() { return description; }
}
public static void main(String[] args) {
System.out.println("========== 场景1:状态/类型定义 ==========");
OrderStatus status = OrderStatus.PAID;
System.out.println("订单状态码:" + status.getCode());
System.out.println("订单状态描述:" + status.getDescription());
System.out.println("\n状态流转:");
OrderStatus current = OrderStatus.PENDING_PAYMENT;
System.out.println("当前:" + current.getDescription());
current = OrderStatus.PAID;
System.out.println("支付后:" + current.getDescription());
current = OrderStatus.SHIPPED;
System.out.println("发货后:" + current.getDescription());
}
}
场景2:策略模式
public class Main {
public enum Calculator {
ADD {
@Override
public int apply(int a, int b) { return a + b; }
},
SUBTRACT {
@Override
public int apply(int a, int b) { return a - b; }
},
MULTIPLY {
@Override
public int apply(int a, int b) { return a * b; }
},
DIVIDE {
@Override
public int apply(int a, int b) { return a / b; }
};
public abstract int apply(int a, int b);
}
public static void main(String[] args) {
System.out.println("========== 场景2:策略模式(替换 if/else)==========");
int a = 10, b = 5;
System.out.println("10 + 5 = " + Calculator.ADD.apply(a, b));
System.out.println("10 - 5 = " + Calculator.SUBTRACT.apply(a, b));
System.out.println("10 × 5 = " + Calculator.MULTIPLY.apply(a, b));
System.out.println("10 ÷ 5 = " + Calculator.DIVIDE.apply(a, b));
String operator = "MULTIPLY";
int result = Calculator.valueOf(operator).apply(a, b);
System.out.println("\n动态调用 " + operator + " 结果:" + result);
}
}
场景3:统一返回码
public class Main {
public enum ResultCode {
SUCCESS(200, "操作成功"),
BAD_REQUEST(400, "请求参数错误"),
UNAUTHORIZED(401, "未登录或登录已过期"),
FORBIDDEN(403, "无权限访问"),
NOT_FOUND(404, "资源不存在"),
INTERNAL_ERROR(500, "服务器内部错误");
private final int code;
private final String message;
ResultCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() { return code; }
public String getMessage() { return message; }
}
public static class ApiResponse<T> {
private int code;
private String message;
private T data;
public ApiResponse(ResultCode resultCode, T data) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
this.data = data;
}
public static <T> ApiResponse<T> success(T data) {
return new ApiResponse<>(ResultCode.SUCCESS, data);
}
public static <T> ApiResponse<T> error(ResultCode resultCode, T data) {
return new ApiResponse<>(resultCode, data);
}
public static <T> ApiResponse<T> error(ResultCode resultCode) {
return new ApiResponse<>(resultCode, null);
}
public int getCode() { return code; }
public String getMessage() { return message; }
public T getData() { return data; }
@Override
public String toString() {
return "{\"code\":" + code + ",\"message\":\"" + message + "\",\"data\":" + data + "}";
}
}
public static void main(String[] args) {
System.out.println("========== 场景3:统一返回码(后端接口必备)==========");
ApiResponse<String> successResp = ApiResponse.success("用户信息获取成功");
ApiResponse<String> errorResp = ApiResponse.error(ResultCode.NOT_FOUND);
System.out.println("成功响应:" + successResp);
System.out.println("失败响应:" + errorResp);
System.out.println("\n所有返回码定义:");
for (ResultCode code : ResultCode.values()) {
System.out.println(" " + code.getCode() + " -> " + code.getMessage());
}
}
}
更多推荐

所有评论(0)