美国当地时间 3 月 19 日, Java 12 正式发布了!Java 12 带来了一系列新特性,其中一个是对Switch的改进
Switch 表达式(预览功能)
扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并控制执行流。这些更改将简化日常编码工作,并为 switch 中的模式匹配(JEP 305)做好准备。
旧写法1
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
在以前的case 表达式写法中,每个CASE必须要用break跳出,否则就呵呵了,逻辑都错了,所以每次都要重复写N个break,漏掉一个可不得了,天都会塌下来的。
新写法1
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
漂亮吧!
旧写法2
变量赋值
int numLetters;
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
numLetters = 6;
break;
case TUESDAY:
numLetters = 7;
break;
case THURSDAY:
case SATURDAY:
numLetters = 8;
break;
case WEDNESDAY:
numLetters = 9;
break;
default:
throw new IllegalStateException("Wat: " + day);
}
新写法2
变量赋值新写法
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
简洁吧!
新写法3
变量赋值,同时还有方法处理过程
int j = switch (day) {
case MONDAY -> 0;
case TUESDAY -> 1;
default -> {
int k = day.toString().length();
int result = f(k);
break result;
}
};
break 作了扩展可以支持参数,这个参数将作为表达式的值
强大吧!
总结
->是Java8里新加入的特性lambda表达式,相当于无名称的函数,这个和Python中的lambda是差不多的意思。
通过这个lambda对switch 进行改进后,代码量更少了,也更加易读。
同时->还可以让我们自己的代码变得简洁易读。
閱讀更多 牧碼人1981 的文章