Java 14的switch表达式箭头语法(->)实现无穿透、自动返回值、编译期穷尽检查;支持多语句分支(需yield)、原生枚举/字符串匹配,并强制default兜底或全覆盖。

Java 14 引入的 switch 表达式箭头语法(->)让分支逻辑更简洁、安全、可读性更强——它天然不穿透(no fall-through),自动返回值,且编译器强制要求覆盖所有可能情况(或用 default兜底)。
用 -> 替代传统 : + break
传统 switch 语句需手动加 break 防穿透,易漏写、难维护;而箭头语法每个分支是独立作用域,只执行对应右侧表达式或代码块,无需 break:
// ✅ 箭头语法:无 break,无穿透,返回值明确
String result = switch (day) {
case MON, TUE, WED -> "First half";
case THU, FRI -> "Second half";
case SAT, SUN -> "Weekend";
default -> "Unknown day";
};
// ❌ 传统写法(冗长且易错)
String result;
switch (day) {
case MON: case TUE: case WED:
result = "First half";
break;
case THU: case FRI:
result = "Second half";
break;
case SAT: case SUN:
result = "Weekend";
break;
default:
result = "Unknown day";
break;
}
支持多语句分支:用大括号 + yield
当单个表达式不够用(比如要计算、日志、条件判断),可在箭头后用 {...} 写多条语句,并用 yield 显式返回结果:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
-
yield是 switch 表达式专用关键字,不是方法调用,不可省略 - 大括号内变量作用域受限,不会污染外层
- 仍保持无穿透特性:执行到
yield就退出当前分支
int score = switch (grade) {
case "A" -> 90;
case "B" -> 80;
case "C" -> 70;
case "D" -> {
System.out.println("Warning: low grade");
yield 60;
}
default -> {
logInvalidGrade(grade);
yield 0;
}
};
配合枚举、字符串、基本类型直接使用
箭头语法原生支持 enum、String、byte/short/int/char 及其包装类——无需额外转换:
立即学习“Java免费学习笔记(深入)”;
- 枚举:推荐用
case E1, E2:合并多个常量 - 字符串:JVM 会自动优化为哈希匹配,性能接近传统 switch
- 注意:不能用于
long、boolean、自定义对象(除非重写equals且确保不可变)
编译器帮你兜底:必须穷尽或写 default
对 enum 类型,若未列出所有枚举常量又没写 default,编译直接报错;对 String 或 int 等,则必须有 default 分支(除非能静态证明已全覆盖):
// ✅ 编译通过(覆盖全部 Color 枚举)
Color c = ...;
String name = switch (c) {
case RED -> "Red";
case GREEN -> "Green";
case BLUE -> "Blue";
}; // ✅ OK —— enum 全覆盖,default 可选
// ❌ 编译失败:缺少 BLUE,也没 default
String name = switch (c) {
case RED -> "Red";
case GREEN -> "Green";
}; // error: enum not exhausted

















