JDK17新特性
原文提供:
文章目录
Switch表达式
参考文档:https://openjdk.org/jeps/406
在Java 14和Java 15中,已经引入了Switch表达式的初始版本。而在JDK 17中,Switch表达式得到了一些改进和增强,包括以下新特性:
-
简化的Switch表达式:在JDK 17中,可以使用简化的Switch表达式来替代传统的Switch语句。这意味着Switch表达式可以像其他表达式一样返回一个值,无需使用break语句,并且每个分支只需要使用"->"符号来分隔条件和代码块。
示例:
int dayOfWeek = 5; String dayType = switch (dayOfWeek) { case 1, 2, 3, 4, 5 -> "工作日"; case 6, 7 -> "休息日"; default -> throw new IllegalArgumentException("无效的星期"); }; System.out.println(dayType); // 输出:工作日
jdk8编写
int dayOfWeek = 5; String dayType; switch (dayOfWeek) { case 1: case 2: case 3: case 4: case 5: dayType = "工作日"; break; case 6: case 7: dayType = "休息日"; break; default: throw new IllegalArgumentException("无效的星期"); } System.out.println(dayType); // 输出:无效的星期
-
新增的Pattern匹配:在JDK 17中,Switch表达式还支持对Pattern进行匹配。这使得我们可以使用Switch表达式来处理更复杂的模式匹配操作,例如对类型、枚举常量等进行匹配。
示例:
Object obj = "Hello"; int length = switch (obj) { case String s -> s.length(); case Integer i && i > 0 -> i; case int[] arr && arr.length > 0 -> arr.length; default -> -1; }; System.out.println(length); // 输出:5
jdk8编写
Object obj = "Hello"; int length; if (obj instanceof String) { String s = (String) obj; length = s.length(); } else if (obj instanceof Integer && ((Integer