网站首页 > java教程 正文
在Java14中,switch提供了一种类似Lambda样式的的语法格式(case -> labels),并且switch不仅仅只能用于代码语句,还可以用在表达式中,该表达式返回一个单值。
Lambda样式语法 (case ... -> labels)
在switch中使用新的Lambda语法样式,如果一个标签匹配,那么在箭头右边的表达式或者语句会被执行,并且不会再往下传递,避免了很多不写break带来的无法预知的异常。
var result = switch (str) {
case "A" -> 1;
case "B" -> 2;
case "C" -> 3;
case "D" -> 4;
default -> throw new IllegalStateException("Unexpected value: " + str);
};
该段代码运行之后,会根据传入的字符串返回一个数字(不考虑异常),同样,箭头后面也可以是一个表达式:
int result;
switch (str) {
case "A" -> result = 1;
case "B" -> result = 2;
case "C" -> {
result = 3;
System.out.println("3!");
}
default -> {
System.err.println("Unexpected value: " + str);
result = -1;
}
}
该段代码中,一旦标签匹配,则会执行标签后的表达式,或者代码块。
yield关键字
如果case后是一个代码块,并且该代码块最终要返回一个值,那么可以使用yield来返回:
var result = switch (str) {
case "A" -> 1;
case "B" -> 2;
case "C" -> {
System.out.println("3!");
yield 3; // 返回值
}
default -> throw new IllegalStateException("Unexpected value: " + str);
};
正如代码中所示,当标签C匹配,执行代码块,通过yield返回3这个单值。注意yield只是跳出switch,而如果用return,就跳出方法了。
一个case中匹配多个常量
在新版本的switch中,同样也支持在一个case中同时匹配多个常量,只需要使用逗号隔开即可:
var result = switch (str) {
case "A" -> 1;
case "B" -> 2;
case "C" -> 3;
case "D", "E", "F" -> 4;
default -> 5;
};
一个综合小案例
结合上面的三个小知识点,我们使用switch完成一个小案例:完成两个数的加减乘除操作:
double calculate(String operator, double x, double y) {
return switch (operator) {
case "+" -> x + y;
case "-" -> x - y;
case "*" -> x * y;
case "/" -> {
if (y == 0) {
throw new IllegalArgumentException("divide by 0");
}
yield x / y;
}
default -> throw new IllegalArgumentException("Error operator '%s'".formatted(operator));
};
}
猜你喜欢
- 2024-09-25 C语言 switch开关语句(c语言程序switch)
- 2024-09-25 好程序员Java教程分享Java的两种跳转语句
- 2024-09-25 如何更优雅的使用JavaScript中的switch语句
- 2024-09-25 java14引入的“记录类型”和“switch增强”
- 2024-09-25 JAVA笔记(三十四):Javascript流程控制语句
- 2024-09-25 C++——switch 语句(c++里switch语句)
- 2024-09-25 Java 17 更新之:模式匹配要支持 switch了
- 2024-09-25 Java 17中的Switch表达式:提高代码可读性
- 2024-09-25 Java中的if语句和switch语句#if语句#switch语句
- 2024-09-25 Java 新特性综合指南:Switch 的模式匹配
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)