Java 14起switch表达式是正式特性(JEP 361),非插件,需JDK、Maven编译器和IDE语言级别均设为14+;用->替代:,自动终止不穿透,必须全覆盖或含default,所有分支须有统一返回值。

Java 14 起,switch 表达式成为正式特性(JEP 361),它不是插件,也不需要额外依赖——只要 JDK、编译器和 IDE 都正确设为 14 或更高版本,就能直接用。
必须配对设置 JDK 和编译级别
光装了 JDK 14 不够,三个地方必须同步:
- 命令行执行
javac -version,输出必须是14.0.x或更高 - Maven 的
pom.xml中,maven-compiler-plugin要同时指定:<source>14</source>和<target>14</target> - IntelliJ:File → Project Structure → Project SDK 和 Project language level 都选 “14”;Eclipse 同理检查 JRE 和 Compiler compliance level
写法上彻底告别 break 和变量中转
老式 switch 是语句,要靠中间变量 + break 拼结果;新式 switch 是表达式,直接赋值、自动终止:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 用
->替代:,每个分支后不写break,也不会穿透 - 所有分支必须有返回值(哪怕是
throw),不能留空 - 支持多常量合并:
case MON, TUE, WED -> "first half" - 示例:
String desc = switch (day) {<br> case MON, TUE, WED -> "工作日上半周";<br> case THU, FRI -> "工作日下半周";<br> case SAT, SUN -> "周末";<br> default -> throw new IllegalArgumentException("无效日期");<br>};
类型统一和穷尽性是硬约束
编译器会严格检查,不满足就报错:
立即学习“Java免费学习笔记(深入)”;
- 所有分支返回值类型必须一致,比如不能有的返回
int、有的返回Integer - enum 类型可推断穷尽性(没写
default也可能过编译);但int、String等必须显式写default,否则编译失败 - 输入为
null时默认抛NullPointerException,如需处理,必须加case null -> ...分支(注意不是case null:)
复杂逻辑可用 yield 或代码块
单表达式不够用?可以写大括号 + yield:
case X -> { /* 多行逻辑 */ yield "result"; }-
yield必须出现在该case的作用域内,不能在 if 外层裸写 - 不推荐混用:同一 switch 里不能既有
case A -> ...,又有case B: ... break;,会编译报错

















