Java 12/13/14 Switch表达式增强与yield用法
请详细说明Java 12/13/14中对Switch的增强。从传统switch语句到switch表达式的演进,箭头语法(->)和yield关键字的用法。switch表达式相比传统switch有哪些优势?
回答
小字辈
传统Switch语句的痛点:
- 省略break导致穿透(fall-through)
- 每个case需要break,代码冗余
- switch是语句不是表达式,无法赋值
- 作用域问题(变量穿透到其他case)
Java 12/13:箭头语法(Preview)
// 箭头语法,无需break,自动防止穿透
String result = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> "休息日";
case TUESDAY -> "工作日";
case THURSDAY, SATURDAY -> "加班日";
case WEDNESDAY -> {
// 代码块,用yield返回值
int len = "星期三".length();
yield len > 2 ? "长" : "短";
}
};
Java 14:Switch表达式正式版(JEP 361)
关键特性:
- 箭头case:
case X -> expression;无需break - yield返回值:代码块中使用
yield value;返回结果 - 逗号多值:
case MONDAY, TUESDAY -> - 穷尽性检查:switch表达式必须覆盖所有可能值(对枚举和sealed类做穷尽检查)
优势:
- 可直接赋值给变量
- 无穿透问题,代码更简洁
- 编译器检查穷尽性,更安全
- 支持更灵活的返回值逻辑