Java 14 新特性:增强版 switch
友情提示
推荐您使用 Chrome 浏览器来阅读本实战专栏,其他浏览器可能存在兼容性问题。
本小节中,我们来学习一下 Java 14 中添加的新特性,增强版的 —— switch
语句。
1. 老版本使用示例
首先,我们来看一段 Java 14 之前的版本中, switch
语句的使用示例,代码如下:
/**
* 输入数字,控制台打印对应的英文
* @param num
*/
public static void say(int num) {
// JDK 14 之前 switch 的使用示例
switch (num) {
case 1:
System.out.println("犬小哈说:one");
break;
case 2:
System.out.println("犬小哈说:two");
break;
case 3:
case 4:
System.out.println("犬小哈说:three or four");
break;
default:
System.out.println("犬小哈说: default");
}
}
public static void main(String[] args) {
// 从 0 循环到 4 ,调用 say() 方法
IntStream.range(0, 5).forEach(i -> say(i));
}
代码解释:
- 定义一个
say()
方法,入参为一个int
类型的数字,通过swtich
语句对其进行判断,将其转换为英文,并打印到控制台;- 从 0 到 4 , 循环调用
say()
方法,查看效果;
控制台输出如下:
2. 箭头语法
在 Java 14 中,我们可以通过箭头语法,对上面的代码做一下简化,无需添加 break
关键字,如下:
/**
* 输入数字,控制台打印对应的英文
* @param num
*/
public static void say(int num) {
// JDK 14 中的 switch 的使用示例
switch (num) {
case 1 -> System.out.println("犬小哈说:one");
case 2 -> System.out.println("犬小哈说:two");
case 3, 4 -> System.out.println("犬小哈说:three or four");
default -> System.out.println("犬小哈说: default");
}
}
public static void main(String[] args) {
// 从 0 循环到 4 ,调用 say() 方法
IntStream.range(0, 5).forEach(i -> say(i));
}
控制台输出如下:
注意: 不能在
switch
语句中,同时使用 -> 箭头 和 : 冒号 。
3. 作为表达式使用
在老版本中,switch
只能充当语句来使用,并不能生成结果。 在 Java 14 之后,可以将 switch
当做表达式来使用。请看下面这段示例代码:
/**
* 将字母转换为数字
* @param letter
* @return
*/
public static int convert2Num(String letter) {
// JDK 14 中的 switch 的使用示例
int num = switch (letter) {
case "A": yield 1;
case "B": yield 2;
case "C": yield 3;
default: yield 0;
};
return num;
}
public static void main(String[] args) {
// 循环字母 A、B、C、D ,并转化为对应的数字输出到控制台
for (String letter : new String[]{"A", "B", "C", "D"}) {
System.out.println(convert2Num(letter));
}
}
代码解释:
- 定义一个
convert2Num()
方法,用于将入参中的letter
字母转换为对应的数字,在使用旧版本:
冒号语法的同时,通过yield
关键字从switch
中返回结果;- 从 A 循环到 D, 调用
convert2Num()
方法;
控制台输出如下:
同样的,我们可以通过箭头语法对上面的代码做简化,同时省略了 yield
关键字,简洁了不少,有木有,如下:
/**
* 将字母转换为数字
* @param letter
* @return
*/
public static int convert2Num(String letter) {
// JDK 14 中的 switch 的使用示例
int num = switch (letter) {
case "A" -> 1;
case "B" -> 2;
case "C" -> 3;
default -> 0;
};
return num;
}
public static void main(String[] args) {
// 循环字母 A、B、C、D ,并转化为对应的数字输出到控制台
for (String letter : new String[]{"A", "B", "C", "D"}) {
System.out.println(convert2Num(letter));
}
}
4. 代码块的支持
当我们在箭头语法中,有多行代码逻辑时,可以通过 {}
大括号包裹住,示例代码如下:
/**
* 将字母转换为数字
* @param letter
* @return
*/
public static int convert2Num(String letter) {
// JDK 14 中的 switch 的使用示例
int num = switch (letter) {
case "A" -> 1;
case "B" -> 2;
case "C" -> {
System.out.println("当前字母为:C");
yield 3;
}
default -> 0;
};
return num;
}
控制台输出如下: