目录
参考:JEP 361: Switch Expressions (Standard)
Java 14 新的 switch 表达式
- 在 Java 14 中,新的 switch 表达式主要改变了两个方面:
- 支持箭头表达式返回;
- 支持 yied 返回值。
1. Java 14 之前 switch 语法
import org.junit.Test;
enum Gender {
MALE, FEMALE, UNKNOWN;
}
public class TestX {
private Gender gender = Gender.MALE;
@Test
public void show() {
switch (gender) {
case MALE:
System.out.println("男");
break;
case FEMALE:
System.out.println("女");
break;
default:
throw new IllegalStateException(gender.toString());
break;
}
}
}
2. Java 14 switch 表达式
@Test
public void show() {
switch (gender) {
case MALE -> System.out.println("男");
case FEMALE -> System.out.println("女");
default -> throw new IllegalStateException(gender.toString());
}
- Java 14 的 switch 表达式使用箭头表达时,不需要在每一个 case 后都加上 break。
3. Java14 之前 switch 语法返回值
import org.junit.Test;
enum Gender {
MALE, FEMALE, UNKNOWN;
}
public class TestX {
public String swi(Gender gender) {
String s;
switch (gender) {
case MALE:
s = "男";
break;
case FEMALE:
s = "女";
break;
default:
throw new IllegalStateException(gender.toString());
}
return s;
}
@Test
public void show() {
String s = swi(Gender.UNKNOWN);
}
}
- 旧版不支持返回值,需要通过一个中间变量来返回。
4. Java14 switch 表达式返回值
public String swi(Gender gender) {
String s = switch (gender) {
case MALE -> "男";
case FEMALE -> "女";
default -> throw new IllegalStateException(gender.toString());
};
}
5. Java 14 switch 表达式使用 yield 返回值
- yield 和 return 的区别在于:return 会直接跳出当前循环或者方法,而 yield 只会跳出当前 switch 块;
public String swi(Gender gender) {
String s = switch (gender) {
case MALE -> "男";
case FEMALE -> "女";
default -> {
yield "未知";
}
};
}
6. 使用分析
- 新的 switch 表达式在旧的 JDK 版本中无法兼容,而且字节码文件反编译后也是旧的 switch 格式,所以不推荐使用新的 switch 表达式。