首页 > 其他分享 >JDK 21更新:switch语句的类型模式匹配与守卫模式

JDK 21更新:switch语句的类型模式匹配与守卫模式

时间:2024-10-19 09:46:19浏览次数:11  
标签:case obj 21 JDK System switch println Integer

Java语言自诞生以来,一直在不断演进,以满足开发者日益复杂的需求。switch语句作为一种控制流结构,在Java中有着广泛的应用。随着JDK 21的发布,switch语句和表达式得到了显著增强,使其在处理复杂条件和类型检查方面更加灵活和强大。本文将详细探讨JDK 21中switch语句和表达式的更新与改进。

一,类型模式匹配

类型模式匹配是JDK 21中对switch语句的一个重要增强。它允许在case标签中直接进行类型检查和模式匹配,从而简化代码逻辑,减少显式的类型转换操作。

示例代码:

Object obj = "Hello, World!";
switch (obj) {
    case Integer i -> System.out.println("Integer: " + i);
    case String s -> System.out.println("String: " + s);
    default -> System.out.println("Unknown type");
}

在这个示例中,switch语句根据obj的实际类型进行匹配,并在匹配成功时执行相应的代码块。类型模式匹配使得代码更加简洁和易读。

二,守卫模式

守卫模式进一步增强了switch语句的匹配能力。它允许在case标签中添加额外的条件检查,从而实现更加精细的控制流。

示例代码:

Object obj = 42;
switch (obj) {
    case Integer i && i > 10 -> System.out.println("Integer greater than 10: " + i);
    case Integer i -> System.out.println("Integer: " + i);
    case String s -> System.out.println("String: " + s);
    default -> System.out.println("Unknown type");
}

在这个示例中,switch语句不仅检查obj是否为Integer类型,还进一步检查其值是否大于10。守卫模式使得switch语句能够处理更复杂的条件逻辑。

三,模式匹配的switch表达式

模式匹配不仅适用于switch语句,还可以用于switch表达式,使得代码更加简洁和可读。switch表达式在JDK 12中首次引入,并在后续版本中不断改进。JDK 21进一步增强了switch表达式的功能,使其支持类型模式和守卫模式。

示例代码:

Object obj = 42;
String result = switch (obj) {
    case Integer i && i > 10 -> "Integer greater than 10: " + i;
    case Integer i -> "Integer: " + i;
    case String s -> "String: " + s;
    default -> "Unknown type";
};
System.out.println(result);

在这个示例中,switch表达式根据obj的实际类型和条件进行匹配,并返回相应的字符串结果。模式匹配的switch表达式使得代码更加简洁和直观。

四,改进的类型推断

JDK 21中的switch语句和表达式在类型推断方面进行了改进,使得代码更加简洁和易于维护。编译器能够更好地推断出switch表达式的返回类型,从而减少显式类型声明的需求。

示例代码:

Object obj = 42;
var result = switch (obj) {
    case Integer i && i > 10 -> "Integer greater than 10: " + i;
    case Integer i -> "Integer: " + i;
    case String s -> "String: " + s;
    default -> "Unknown type";
};
System.out.println(result);

在这个示例中,使用var关键字让编译器自动推断result的类型,使得代码更加简洁。

五,增强的错误检测

JDK 21对switch语句和表达式的错误检测能力进行了增强,可以更早地捕捉潜在的错误和不一致。例如,如果switch语句或表达式中的所有可能情况都没有被处理,编译器将发出警告或错误提示。

示例代码:

Object obj = 42;
switch (obj) {
    case Integer i && i > 10 -> System.out.println("Integer greater than 10: " + i);
    // case Integer i -> System.out.println("Integer: " + i); // Uncommenting this line will cause a compile-time error
    case String s -> System.out.println("String: " + s);
    default -> System.out.println("Unknown type");
}

在这个示例中,如果注释掉的case标签未被处理,编译器将发出错误提示,提醒开发者处理所有可能的情况。

六,总结

JDK 21中的switch语句和表达式的增强,使得Java语言在处理复杂条件和类型检查方面更加灵活和强大。类型模式匹配、守卫模式、模式匹配的switch表达式、改进的类型推断以及增强的错误检测能力,使得代码更加简洁、易读和易于维护。这些改进不仅提高了开发效率,还为开发者提供了更强大的工具来编写更加可靠和可维护的代码。

标签:case,obj,21,JDK,System,switch,println,Integer
From: https://blog.csdn.net/weixin_43319056/article/details/143014821

相关文章

  • 架构师之路-学渣到学霸历程-21
    云计算-SRE架构师的想法篇:刚完成了第一阶段的学习,暂停一下,思索着明天继续分享第二阶段的内容,因此也就发表一下想法;仅仅是个人的理解;或许有错,或许有不妥,仅仅代表目前现在我的想法了;1.想法:今晚其实也很克制自己了,想着要回来进行一个分享;我思索了很久,应不应该继续分享第二......
  • 红米ac2100从openwrt刷回官方系统的教程
    第一步、关闭杀毒软件和防火墙关闭系统自带的Windows安全中心。关闭防火墙:Win+R,输入control回车。打开控制面板,关闭网络防火墙。第二步、更新官方BootLoader这是最重要的一步,如果是刷过openwrt系统的路由器少了这一步,官方修复工具会一直检测不到第二次上线。进入breed,在Boo......
  • 2021年10月自考《数据库系统原理》04735试题
    目录一.选择题二.填空题三.简答题四.综合题五.设计题一.选择题1.以下不属于数据中存储数据的特点是(书中)P28页A.永久存储 B.集中管理 C.有组织D.可共享2.数据库(DB),数据库系统(DBS)和数据库管理系统(DBMS)三者之间的关系是(书中)P29页A.DBS包括DB和DBMSB.DBMS包括DB......
  • 一步到位:在Windows上轻松配置JDK环境变量的详细指南
    Windows系统配置JDK环境变量配置JDK环境变量是确保Java开发工具可以在命令行中正确运行的关键步骤。以下是针对Windows系统配置JDK环境变量的通用步骤:确定JDK安装路径:找到你安装JDK的路径。我的是D:\JAVA\JDK设置JAVA_HOME环境变量:右键点击“此电脑”或“我的电脑”......
  • ZROI-21-CSP7连-DAY 7 T2
    题面挂个pdf题面下载算法有点像扫描线?容易想到离散化坐标点,那么对于离散化之后的坐标\(x\),粗略来看,其能分开区间的个数即为\(\displaystyle\sum_{i=1}^{n}\left[{l_i<x<R_i}\right]\)这个可以用类似于差分的方法解决,每次对于一个区间\(\left(l_i,r_i\r......
  • Java中JDK8-17新特性下
    JDK8-17新特性(第二部分)目录JDK8-17新特性(第二部分)switch表达式增强文本块标准化模式匹配局部变量类型判断switch表达式增强在Java中,switch语句的增强主要体现在Java12引入的预览特性(并在Java14中成为正式特性)中,即所谓的“SwitchExpressions”(switch表达式)。这个新特性使得s......
  • P5690 [CSP-S2019 江西] 日期 &&P7909 [CSP-J 2021] 分糖果 &&P5657 [CSP-S2019] 格雷
    今天继续懒惰,继续三合一!!![CSP-S2019江西]日期题目背景CSP-SJX2019T1题目描述Alice在纸上写下了一个日期,形式为\(\text{MM-DD}\),其中\(\text{MM}\)与\(\text{DD}\)都是两位数字,分别表示月和天,然而这个日期并不一定存在。Alice找来了Bob要他更改若干位上的数字,使得这个......
  • JDK 安装教程
    在Java开发中,安装JDK(JavaDevelopmentKit)是第一步。本文将详细介绍JDK的安装过程,确保你能顺利搭建Java开发环境。一、准备工作下载JDK打开浏览器,访问Oracle官方网站。在官网找到JDK下载页面,根据你的操作系统选择对应的版本进行下载。例如,Windows系统可以......
  • 最新毕设-SpringBoot-校园学习交流和资源共享平台-78210(免费领项目)可做计算机毕业设计
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1 数据流程2.2.2 用户登录流程2.3 系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4 系统用例分析2.5本章小结3 系统......
  • 基于网络爬虫技术的中国电动汽车市场分析与可视化系统 毕业设计-附源码02721
    摘要中国电动汽车市场快速发展,政策支持和环保意识提升推动了电动汽车需求增长。基于网络爬虫技术的中国电动汽车市场分析与可视化系统旨在提供全面的电动汽车市场数据分析和直观的可视化展示。系统利用Python进行数据处理和分析,Django构建后端框架,Vue实现前端交互,实现数据的......