Java编程作业:枚举类型的三个经典应用场景(第三章)

一、什么是枚举

枚举(Enum)是Java中一种特殊的类,用于定义一组固定的常量。比如星期、季节、订单状态等,用枚举表示比用intString更安全、更清晰。

基本语法:

enum Weekday {
MON, TUE, WED, THU, FRI, SAT, SUN
}
AI写代码
java
运行
枚举自带values()ordinal()等方法,还可以添加属性和自定义方法。

二、场景1:状态/类型定义(最常用!)

用枚举表示有限个状态或类型

适用场景

  • 订单状态(待支付、已支付、已发货、已完成)
  • 用户角色(管理员、普通用户、访客)
  • 任务优先级(高、中、低)

订单状态管理代码示例
enum OrderState {
PENDING, // 待支付
PAID, // 已支付
SHIPPED, // 已发货
COMPLETED, // 已完成
CANCELLED; // 已取消

// 判断是否可以取消
public boolean isCancelable() {
return this == PENDING || this == PAID;
}
}

class Order {
private int id;
private OrderState state;

public Order(int id) {
this.id = id;
this.state = OrderState.PENDING;
}

public void pay() {
if (state == OrderState.PENDING) {
state = OrderState.PAID;
System.out.println(“订单” + id + “支付成功”);
} else {
System.out.println(“订单” + id + “状态异常,无法支付”);
}
}

public void cancel() {
if (state.isCancelable()) {
state = OrderState.CANCELLED;
System.out.println(“订单” + id + “已取消”);
} else {
System.out.println(“订单” + id + “当前状态不可取消”);
}
}

public void showState() {
System.out.println(“订单” + id + “状态:” + state);
}
}

public class Demo1_State {
public static void main(String[] args) {
Order order = new Order(1001);
order.showState(); // 待支付
order.pay(); // 支付成功
order.cancel(); // 已支付状态下可取消
order.showState(); // 已取消
}
}
AI写代码
java
运行

运行结果
订单1001状态:PENDING
订单1001支付成功
订单1001已取消
订单1001状态:CANCELLED
AI写代码
三、场景2:策略模式(替换大量 if/else)

每个枚举常量实现自己的业务逻辑,消除长长的分支判断

适用场景

  • 计算器(加、减、乘、除)
  • 折扣计算(打折、满减、赠品)
  • 排序算法 (升序、降序)

代码实现
enum Calculator {
ADD {
public double apply(double a, double b) {
return a + b;
}
},
SUB {
public double apply(double a, double b) {
return a - b;
}
},
MUL {
public double apply(double a, double b) {
return a * b;
}
},
DIV {
public double apply(double a, double b) {
if (b == 0) throw new ArithmeticException(“除数不能为0”);
return a / b;
}
};

public abstract double apply(double a, double b);
}

public class Demo2_Strategy {
public static void main(String[] args) {
double x = 10, y = 3;
System.out.println(x + “ + “ + y + “ = “ + Calculator.ADD.apply(x, y));
System.out.println(x + “ - “ + y + “ = “ + Calculator.SUB.apply(x, y));
System.out.println(x + “ * “ + y + “ = “ + Calculator.MUL.apply(x, y));
System.out.println(x + “ / “ + y + “ = “ + Calculator.DIV.apply(x, y));
}
}
AI写代码
java
运行

运行结果
10.0 + 3.0 = 13.0
10.0 - 3.0 = 7.0
10.0 * 3.0 = 30.0
10.0 / 3.0 = 3.3333333333333335
AI写代码
代码优势
传统 if-else 实现方式:

if (op.equals(“ADD”)) {
return a + b;
} else if (op.equals(“SUB”)) {
return a - b;
}
// 其他操作…
AI写代码
java
运行
枚举策略模式优势:

代码结构更清晰
扩展性更强
减少重复代码
类型安全
四、场景3:统一返回码(后端接口必备)

用枚举管理API返回的状态码 和提示信息

适用场景

  • RESTful API 响应(成功码200,错误码400/401/500等)
  • 业务错误码(用户不存在、密码错误等)

统一响应封装代码示例
enum ResultCode {
SUCCESS(200, “成功”),
BAD_REQUEST(400, “请求参数错误”),
UNAUTHORIZED(401, “未授权”),
NOT_FOUND(404, “资源不存在”),
SERVER_ERROR(500, “服务器内部错误”),
USER_NOT_EXIST(1001, “用户不存在”),
PASSWORD_WRONG(1002, “密码错误”);

private final int code;
private final String msg;

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

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

}

class ApiResult {
private int code;
private String message;
private Object data;

private ApiResult(int code, String message, Object data) {
    this.code = code;
    this.message = message;
    this.data = data;
}

public static ApiResult success(Object data) {
    return new ApiResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg(), data);
}

public static ApiResult error(ResultCode resultCode) {
    return new ApiResult(resultCode.getCode(), resultCode.getMsg(), null);
}

@Override
public String toString() {
    return "{code:" + code + ", message:" + message + ", data:" + data + "}";
}

}

public class Demo3_ResultCode {
public static void main(String[] args) {
// 模拟登录接口返回
String username = “test”;
String password = “123”;

    if (!"admin".equals(username)) {
        System.out.println(ApiResult.error(ResultCode.USER_NOT_EXIST));
    } else if (!"123456".equals(password)) {
        System.out.println(ApiResult.error(ResultCode.PASSWORD_WRONG));
    } else {
        System.out.println(ApiResult.success("登录成功,token=xxx"));
    }

    // 打印所有返回码
    System.out.println("\n所有返回码:");
    for (ResultCode code : ResultCode.values()) {
        System.out.println(code.getCode() + " -> " + code.getMsg());
    }
}

}
AI写代码
java
运行

运行结果示例
{code:1001, message:用户不存在, data:null}

所有返回码:
200 -> 成功
400 -> 请求参数错误
401 -> 未授权
404 -> 资源不存在
500 -> 服务器内部错误
1001 -> 用户不存在
1002 -> 密码错误
AI写代码

五、总结

枚举的高级应用场景
场景 解决的问题 技术要点
状态/类型定义 避免魔法数字/字符串 枚举常量 + 属性 + 方法
策略模式 消除大量 if-else 抽象方法 + 常量各自实现
统一返回码 集中管理错误码 枚举 + 自定义构造器
枚举不仅仅是“常量列表”,更是一种强大的面向对象 工具。掌握这三种用法可以让代码更优雅、更安全。

六、作业心得

本次作业让我深刻理解了枚举在实际开发中的价值,尤其是策略模式替换if-else的思路,非常实用。

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2026 Shipanxs
  • 访问人数: | 浏览次数:

如果这篇文章对你有帮助,可以请我喝杯茶

支付宝

支付宝扫一扫