WMX · 随记
·Java· 3 分钟阅读

枚举与 switch:把有限状态写进类型

用字符串表示订单状态,拼写错误只有运行后才暴露。枚举能约束取值范围,但输入字符串仍需要边界转换。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Java Full Course

Java 基础课程作为语言背景复习;本文的特定 API、版本行为和边界条件以正文及文档为准。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Java 系列概览:类型与值、状态与资源、边界验证
Java 系列概览:类型与值、状态与资源、边界验证 点击图片查看大图 ↗

问题从哪里出现

用字符串表示订单状态,拼写错误只有运行后才暴露。枚举能约束取值范围,但输入字符串仍需要边界转换。

理解核心机制

枚举适合表达封闭的有限集合。switch 表达式返回值,并要求覆盖输入状态;外部输入应先经过受控解析,而不是让原始字符串在业务逻辑里自由流动。

动手做一个小实验

Java 17 或更新版本;将示例保存为 Demo.java,执行 javac Demo.java 后运行 java Demo。

Java12 行 · 可横向滚动
public class Demo {
    enum Status { PENDING, PAID, CANCELLED }
    static boolean canShip(Status status) {
        return switch (status) {
            case PAID -> true;
            case PENDING, CANCELLED -> false;
        };
    }
    public static void main(String[] args) {
        System.out.println(canShip(Status.PAID));
    }
}

适用边界与常见误区

枚举增加新值时,数据库、消息消费者和旧版本客户端也要考虑兼容。不能只看本地 switch 能否编译。

继续练习

加入 REFUNDED 状态并重新编译,列出需要重新审视的分支;再给外部未知状态设计明确的错误响应。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档