java 14 正式引入 switch 表达式,支持箭头语法、多常量合并、yield 返回及 null 显式处理,要求穷尽覆盖与分支统一返回值。

Java 14 正式将 switch 表达式纳入标准,不再是预览特性。它让 switch 不仅能控制流程,还能直接返回值,写法更安全、简洁、不易出错。
箭头语法替代冒号 + break
传统 switch 需要每个 case 后手动加 break,漏写就会穿透;JDK 14 起支持 case value -> 写法,自动阻断穿透,无需 break。
- 多个常量可用逗号合并:
case 1, 2, 3 -> "small" - 单条语句直接跟在箭头后,不加大括号
- 复合逻辑用大括号包裹,内部可写多行语句
switch 可作为表达式直接赋值或返回
不再依赖中间变量,switch 本身就能产出值,类型由所有分支统一推断。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 必须覆盖所有可能输入:enum 类型编译器能检查穷尽性;int/String 等需显式写
default -> - 每个分支必须有结果:可以是字面量、throw 异常、或用 yield 返回
- 示例:
String type = switch(day) { case 1,2,3,4,5 -> "weekday"; case 6,7 -> "weekend"; default -> throw new IllegalArgumentException(); };
yield 关键字用于复杂分支返回
当某个 case 需要执行多步操作再返回值时,用 yield 显式指定返回点。
- yield 只能在 switch 表达式中使用,作用类似 return,但只跳出当前 case
- 可与箭头语法共存:箭头后是单表达式,大括号内用 yield 处理多语句
- 示例:
case "debug" -> { System.out.println("enabling debug"); yield true; }
null 输入必须显式处理
switch 表达式对 null 零容忍——如果传入 null 且没有 case null -> 分支(注意不是 case null:),会直接抛 NullPointerException。
- JDK 14 尚不支持
case null(那是 JDK 17 的预览特性) - 稳妥做法:调用前用
Objects.requireNonNull()校验,或在 switch 前做 if (obj == null) 判断 - 若必须在 switch 内处理,可把输入转为 Optional 或用其他方式兜底










