Switch表达式增强
大约 2 分钟
Switch表达式增强
1、示例一
该特性先后由JDK12的JEP 325: Switch Expressions(Preview)、JDK13的JEP 354: Switch Expressions (Preview)引入,并在JDK14的JEP 361: Sitch Expressions正式转正。
1.1、传统的方式 case中变量赋值示例
public class SwitchTest {
private String name;
private String alias;
@BeforeEach
public void jinTest() {
name = "Jin";
}
}
/**
* <h2>传统的方式 case中变量赋值示例</h2>
*/
@Test
public void demo1() {
switch (name) {
case "Jin":
alias = "男性";
break;
case "JinX":
alias = "女性";
break;
default:
alias = "未知";
break;
}
System.out.println(alias);
}
输出结果
男性
1.2、jdk17 case中变量赋值示例
/**
* <h2>JDK17 case 中变量赋值代码示例</h2>
*/
@Test
public void demo2() {
alias = switch (name) {
case "Jin" -> "男性";
case "JinX" -> "女性";
default -> "未知";
};
System.out.println(alias);
}
输出结果
男性
2、示例二
2.1、传统的方式 case中值匹配多个示例
/**
* <h2>传统的方式 case中值匹配多个示例</h2>
*/
@Test
public void demo3() {
switch (name) {
case "Jin":
case "Jin1":
alias = "男性";
break;
case "JinX":
case "JinX1":
alias = "女性";
break;
default:
alias = "未知";
break;
}
System.out.println(alias);
}
输出结果
男性
2.2、jdk17 case中值匹配多个示例
/**
* <h2>JDK17 case 中值匹配多个示例</h2>
*/
@Test
public void demo4() {
alias = switch (name) {
case "Jin", "Jin1" -> "男性";
case "JinX", "JinX1" -> "女性";
default -> "未知";
};
System.out.println(alias);
}
输出结果
男性
3、示例三
3.1、传统的方式 case中需要多行业务代码示例
/**
* <h2>传统的方式 case需要多行业务代码示例</h2>
*/
@Test
public void demo5() {
switch (name) {
case "Jin":
alias = "男性";
System.out.println("多行代码示例1");
break;
case "JinX":
alias = "女性";
System.out.println("多行代码示例2");
break;
default:
alias = "未知";
System.out.println("多行代码示例3");
break;
}
System.out.println(alias);
}
输出结果
男性
3.2、jdk17中 case中需要多行业务代码示例
@Test
public void demo6() {
alias = switch (name) {
case "Jin", "Jin1" -> {
System.out.println("多行代码示例");
yield "男性";
}
case "JinX", "JinX1" -> {
System.out.println("多行代码示例2");
yield "女性";
}
default -> {
System.out.println("多行代码示例3");
yield "未知";
}
};
System.out.println(alias);
}
4、示例四
4.1、jdk17 case中支持对象的类型匹配示例
/**
* <h2>JDK17 case 中支持对象的类型匹配示例</h2>
*/
@Test
public void demo7() {
String patternMatchSwitch = getPatternMatchSwitch(name);
System.out.println(patternMatchSwitch);
}
private String getPatternMatchSwitch(Object o){
return switch (o) {
case null -> "object is null";
case Integer i -> "Integer";
case Long l -> "Long";
case Double d -> "Double";
default -> "String";
};
}
输出结果:
java: patterns in switch statements 是预览功能,默认情况下禁用。
(请使用 --enable-preview 以启用 patterns in switch statements)