java 14起引入switch表达式,用->替代:,要求穷尽覆盖、无fall-through、支持yield返回值,可直接赋值或返回,更安全简洁。

Java 14 开始引入 switch 表达式(JEP 361),并在 Java 14+ 中正式支持用箭头符号 -> 替代传统冒号 :,让分支更简洁、更安全、更函数式。它不仅避免了 break 遗漏导致的“fall-through”,还能直接返回值,天然适配变量赋值和方法返回。
箭头语法的基本写法与核心规则
使用 -> 的 switch 表达式必须是**穷尽的(exhaustive)**,即所有可能情况都要覆盖(或有 default)。每个分支只执行右侧表达式或代码块,不会穿透到下一分支。
- 单表达式分支:直接写值,自动返回,末尾不加分号
case 1 -> "周一"; - 多语句分支:用花括号包裹,需显式
yield返回结果case 2 -> { System.out.println("处理周二"); yield "周二"; } - 多个常量共用一个分支:用逗号分隔
case 6, 7 -> "周末"; - 必须有
default(除非枚举/有限类型已穷尽)default -> "未知日期";
配合类型推断,简化变量赋值
箭头 switch 是表达式,可直接用于初始化局部变量或作为方法返回值,编译器能自动推断类型:
智能模型自动切换 V5.0.2 - 多模态感知,自动识别图片/视频/音频/代码/文本任务,切换最优模型。支持图片理解(qwen3-vl-plus)、视频音频(qwen3.5-plus)、代码(glm-5)、Office文档(MiniMax-M2.5)、推理等场景。零感知切换,无需手动操作。
int day = 3;
String weekDay = switch (day) {
case 1 -> "周一";
case 2 -> "周二";
case 3 -> "周三";
case 4 -> "周四";
case 5 -> "周五";
case 6, 7 -> "周末";
default -> "无效";
}; // 注意结尾分号 —— 整个 switch 是一个表达式语句
无需临时变量、break 或 if-else 嵌套,逻辑一目了然。
处理复杂逻辑:在花括号中使用 yield 和局部变量
当某个分支需要计算、日志、异常检查等操作时,用花括号 + yield 显式返回:
String statusDesc = switch (status) {
case ACTIVE -> "运行中";
case PENDING -> {
log.info("等待审核");
yield "待审核";
}
case REJECTED -> {
String reason = getRejectReason();
yield "已拒绝:" + reason;
}
default -> throw new IllegalArgumentException("不支持的状态: " + status);
};
yield 是 switch 表达式专用关键字(类似 return),确保该分支的返回值被统一捕获;抛出异常也属于合法的“返回”行为(控制流终止)。
与传统 switch 语句的关键区别
- 传统
switch是语句(statement),不能直接赋值;箭头switch是表达式(expression),必须有返回值 - 传统用
:+break防穿透;箭头用->天然无穿透,更安全 - 传统允许空分支或隐式 fall-through;箭头不允许,缺失
default且未穷尽会编译报错 - 箭头 switch 支持
String、enum、int、Integer等,和传统一致,但更鼓励使用不可变值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










