每个 Java 开发人员都必须了解的 Java 中的模式匹配和记录变化

每个 java 开发人员都必须了解的 java 中的模式匹配和记录变化

随着 Java 16 的发布,记录(JEP 395)的引入带来了重大改进,它允许以更简单、更简洁的方式来声明主要用于携带数据的类。现在,通过添加模式匹配和记录 (JEP 406),这一改进在 Java 21 中得到了进一步增强。这个新功能允许使用模式匹配来测试某个值是否是 Record 类的实例,并以更简化的方式提取其组件。在本文中,我们将探讨 Java 21 中模式匹配和记录带来的变化以及它如何使 Java 开发人员受益。

记录作为数据的透明载体
Java 16 中引入的记录是主要用于存储和携带数据的类。它们是透明的载体,这意味着它们的主要目的是保存数据,而所有其他功能(例如构造函数、方法和 equals/hashCode 方法)都是由编译器根据记录中定义的数据字段自动生成的。这使得它们非常适合在需要序列化或通过网络发送数据的场景中使用。

考虑定义两个 X 和 Y 坐标的 Line 类的示例:

记录 Line(int x, int y) {}

要使用此类,我们只需创建 Line 类的实例并使用内置组件访问器方法 x() 和 y() 访问其数据字段:

立即学习“Java免费学习笔记(深入)”;

Line line = new Line(0, 10);
int x = line.x();
int y = line.y();
System.out.println(“X: ” + x + “, Y: ” + y); // 输出:X:0,Y:10

与记录的模式匹配
在 Java 21 中,添加了模式匹配,这使得可以测试某个值是否是 Record 类的实例并以更简化的方式提取其组件。在处理广泛使用记录的大型代码库时,此功能特别有用。

考虑下面的示例,我们要测试一个对象是否是 Line 类的实例并提取其组件:

静态无效长度(对象 obj){
if (obj instanceof Line l) {
int x = l.x();
int y = l.y();
System.out.println(y-x);
}
}
正如您所看到的,我们使用类型模式来测试该对象是否是 Point 的实例,如果是,我们就通过调用内置组件访问器方法来提取其组件。虽然此代码有效,但可以使用 Java 21 中的记录模式进一步简化它。

使用记录模式,我们不仅可以测试一个值是否是 Record 类的实例,还可以通过一行代码提取其组件。这是通过将提取的组件的局部变量声明提升到模式本身中,并在值与模式匹配时调用访问器方法来初始化这些变量来实现的。

Ai Mailer Ai Mailer

使用Ai Mailer轻松制作电子邮件

Ai Mailer 49 查看详情 Ai Mailer

考虑以下使用记录模式的代码:

静态无效长度(对象 obj){
if (obj instanceof Line(int x, int y)) {
System.out.println(y-x);
}
}
这段代码更加简洁和可读。我们不再需要创建新对象并调用其组件访问器方法来获取数据。记录模式直接为我们提取并初始化组件,让我们的代码更加精简。

嵌套记录模式
开发人员面临的主要挑战之一是处理复杂的对象图并从中提取数据。这就是模式匹配的真正威力所在,因为它允许我们优雅地扩展并匹配更复杂的对象图。

考虑以下类:Employee、Department(枚举)和 Company(记录)。我们可以使用记录模式从 Company 对象中提取员工的部门:

// 从 Java 21 开始
static void printEmployeeDepartment(公司 c, 字符串名称) {
if (c instanceof Company(部门 dept, List 员工)) {
对于(员工 e:员工){
if (e.getName().equals(name)) {
System.out.println(name + ” 位于 ” + dept + ” 部门。”);
返回;
}
}
}
System.out.println(name + “未找到。”);
}
在此示例中,我们使用嵌套模式从 Company 对象中提取 Employee 的部门。我们检查给定的 Company 对象是否有部门和员工列表,然后循环列表以查找具有给定名称的员工。如果找到该员工,我们会打印他们的部门。如果没有,我们会打印一条消息,指出未找到该员工。

嵌套模式也可以用于我们想要一次匹配和解构多个值的情况。考虑以下示例,我们要检查给定坐标是否位于矩形内:

//从 Java 21 开始
记录点(双x,双y){}

记录矩形(左上点,右下点){}

// 检查给定点是否位于给定矩形内
static boolean isPointInsideRectangle(点 p, 矩形 r) {
if (r 矩形实例(Point(var x1, var y1), Point(var x2, var y2))) {
if (p.x() > x1 && p.y() > y1 && p.x() < x2 && p.y() < y2) {
返回真;
}
}
返回错误;
}

在此示例中,我们使用嵌套模式来检查给定的 Point 对象是否落在给定的 Rectangle 对象的范围内。嵌套模式允许我们访问矩形左上角和右下角的 x 和 y 坐标,而无需编写多行代码。

总之,通过在 Java 21 中添加模式匹配和记录 (JEP 406),我们在处理复杂对象和从复杂对象中提取数据的方式上有了显着的改进。此功能极大地简化了代码,使其更具可读性和简洁性。它还有助于处理模式匹配可能失败的故障场景。通过这些更改,Java 21 继续使代码更加精简,并改善 Java 开发者的开发体验。

通过 MyExamCloud 的 Java SE 21 开发人员专业练习测试升级您的 Java 21 技能。发展并测试您的知识,成为 Java 21 专家。

以上就是每个 Java 开发人员都必须了解的 Java 中的模式匹配和记录变化的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1014456.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Go语言结构体与指针:深入理解引用行为及其内存机制
上一篇 2025年12月2日 00:34:57
mysql中AND和OR条件如何组合_mysql AND OR使用方法
下一篇 2025年12月2日 00:35:07

相关推荐

  • MySQL数据库备份与恢复性能优化的项目经验解析

    MySQL数据库备份与恢复性能优化的项目经验解析MySQL数据库备份与恢复性能优化的项目经验解析MySQL数据库备份与恢复性能优化的项目经验解析MySQL数据库备份与恢复性能优化的项目经验解析

    在当前互联网时代,数据的重要性不言而喻。作为互联网应用的核心组成部分之一,数据库的备份与恢复工作显得尤为重要。然而,随着数据量的不断增大和业务需求的日益复杂,传统的数据库备份与恢复方案已无法满足现代应用的高可用和高性能要求。因此,对MySQL数据库备份与恢复性能进行优化成为一个亟需解决的问题。 在实…

    2026年9月28日 • 用户投稿
    100
  • Linux协议栈的演进与发展趋势探讨

    Linux协议栈的演进与发展趋势探讨Linux协议栈的演进与发展趋势探讨Linux协议栈的演进与发展趋势探讨Linux协议栈的演进与发展趋势探讨

    Linux协议栈的演进与发展趋势探讨 随着互联网的快速发展以及物联网、5G等新技术的迅猛崛起,作为网络基础设施中的重要组成部分,协议栈在操作系统中的作用变得越发重要。而在众多操作系统中,Linux作为一款开源操作系统,其协议栈的发展也备受关注。本文将探讨Linux协议栈的演进与发展趋势,并结合具体的…

    2026年9月28日 • 用户投稿
    000
  • 12306手机App如何为他人代买车票 12306手机App家庭购票的便捷操作

    12306手机App如何为他人代买车票 12306手机App家庭购票的便捷操作12306手机App如何为他人代买车票 12306手机App家庭购票的便捷操作12306手机App如何为他人代买车票 12306手机App家庭购票的便捷操作12306手机App如何为他人代买车票 12306手机App家庭购票的便捷操作

    首先添加乘车人信息至12306账户,完成实名核验;2. 查询并选择合适的车次;3. 提交订单时选择已添加的乘车人;4. 支付成功后系统自动推送购票信息,完成代购。 如果您想为家人或朋友购买火车票,但又不想让他们亲自操作或排队购票,可以通过铁路12306官方App轻松实现代购。以下是详细的代购票操作方…

    2026年9月28日 • 用户投稿
    100
  • x浏览器账号无法登录是什么情况_x浏览器账户登录失败原因与对策

    x浏览器账号无法登录是什么情况_x浏览器账户登录失败原因与对策x浏览器账号无法登录是什么情况_x浏览器账户登录失败原因与对策x浏览器账号无法登录是什么情况_x浏览器账户登录失败原因与对策x浏览器账号无法登录是什么情况_x浏览器账户登录失败原因与对策

    首先检查网络连接是否正常,确认Wi-Fi或移动数据可访问互联网;其次核对账号密码输入是否准确,注意大小写和空格;若仍无法登录,清除x浏览器应用缓存与数据后重启;确保浏览器已更新至最新版本,避免因版本过旧导致兼容问题;最后排查服务器状态及地区限制,查看官方公告或联系客服解决。 如果您在尝试登录x浏览器…

    2026年9月28日 • 用户投稿
    000
  • 小米澎湃OS 3全球发布计划公布 首批10月开始推送

    小米澎湃OS 3全球发布计划公布 首批10月开始推送小米澎湃OS 3全球发布计划公布 首批10月开始推送小米澎湃OS 3全球发布计划公布 首批10月开始推送小米澎湃OS 3全球发布计划公布 首批10月开始推送

    9月25日,%ignore_a_1%公布了澎湃os 3系统的全球推送安排,宣布该系统将从10月起分阶段向多款设备陆续推送。首批获得更新的机型为近期发布的小米15t系列。 整个推送计划分为三个阶段推进。第一阶段于10月至11月启动,涵盖小米15T/Pro、小米15 Ultra、MIX Flip、RED…

    2026年9月28日 • 用户投稿
    000
  • 阿维塔 12 大定订单超过 4 万台 晖金新配色车型已在路上

    阿维塔 12 大定订单超过 4 万台 晖金新配色车型已在路上阿维塔 12 大定订单超过 4 万台 晖金新配色车型已在路上阿维塔 12 大定订单超过 4 万台 晖金新配色车型已在路上阿维塔 12 大定订单超过 4 万台 晖金新配色车型已在路上

    阿维塔最新公布,其旗下纯电动轿车阿维塔12已经突破了4万台的大定订单。此前,阿维塔科技总裁陈卓宣布,本月的生产目标为8千至1万台,预计交付数量将达到8千台。而在新配色方面,公司还计划推出一款名为“晖金”的新配色车型。这一系列的举措显示出消费者对阿维塔电动车的强烈兴趣和认可。随着电动车市场的持续增长,…

    2026年9月28日 • 用户投稿
    000
  • win7系统加密文件夹的方法

    win7系统加密文件夹的方法win7系统加密文件夹的方法win7系统加密文件夹的方法win7系统加密文件夹的方法

    提到电脑文件夹加密的问题,想必大家都尝试过各种方法来保障重要资料的安全性。那么你知道win7系统的文件夹该如何设置密码吗?实际上,我们既可以通过windows系统的内置功能实现加密,也可以借助第三方加密软件完成这一操作。接下来就为大家详细介绍win7系统文件夹加密的具体步骤! win7文件夹的加密方…

    2026年9月28日 • 用户投稿
    1000
  • 抖音商城上的商品是正品吗?抖音商城的货为啥便宜

    抖音商城上的商品是正品吗?抖音商城的货为啥便宜抖音商城上的商品是正品吗?抖音商城的货为啥便宜抖音商城上的商品是正品吗?抖音商城的货为啥便宜抖音商城上的商品是正品吗?抖音商城的货为啥便宜

    随着抖音的崛起,抖音商城也随之而来。抖音商城作为抖音平台旗下的电商购物平台,为广大消费者提供了丰富的商品选择。一些消费者对于抖音商城上的商品是否为正品产生了疑问。今天,我们就来揭秘抖音商城的正品保证,让消费者放心购物。 一、抖音商城的背景 抖音商城于2018年上线,是抖音平台旗下的电商购物平台。抖音…

    2026年9月28日 • 用户投稿
    200
  • MySQL分布式事务处理与并发控制的项目经验解析

    MySQL分布式事务处理与并发控制的项目经验解析MySQL分布式事务处理与并发控制的项目经验解析MySQL分布式事务处理与并发控制的项目经验解析MySQL分布式事务处理与并发控制的项目经验解析

    MySQL分布式事务处理与并发控制的项目经验解析 近年来,随着互联网的迅猛发展和用户数量的不断增加,对于数据库的要求也日益提高。在大型分布式系统中,MySQL作为最常用的关系型数据库管理系统之一,一直扮演着重要的角色。但是,随着数据规模的增大和并发访问的增加,MySQL的性能和扩展性面临了严峻的挑战…

    2026年9月28日 • 用户投稿
    200
  • 高德地图离线地图怎么下载和使用_高德地图离线地图下载与使用教程

    高德地图离线地图怎么下载和使用_高德地图离线地图下载与使用教程高德地图离线地图怎么下载和使用_高德地图离线地图下载与使用教程高德地图离线地图怎么下载和使用_高德地图离线地图下载与使用教程高德地图离线地图怎么下载和使用_高德地图离线地图下载与使用教程

    下载离线地图可实现无网导航,1、通过高德地图APP在“我的-离线地图”中选择城市或自定义区域下载;2、支持手机端直接下载地图与导航数据;3、可通过电脑下载ZIP包并导入设备;4、下载后可在无网时正常使用导航功能。 如果您需要在没有网络连接的环境下使用导航,下载离线地图是确保定位和路线规划正常运行的关…

    2026年9月28日 • 用户投稿
    300
  • MySQL如何使用外键约束删除 级联删除与SET NULL策略

    MySQL如何使用外键约束删除 级联删除与SET NULL策略MySQL如何使用外键约束删除 级联删除与SET NULL策略MySQL如何使用外键约束删除 级联删除与SET NULL策略MySQL如何使用外键约束删除 级联删除与SET NULL策略

    外键约束在mysql中用于维护数据完整性,级联删除和set null是两种处理删除操作的策略。1. 创建父表并定义主键;2. 创建子表时通过foreign key指定外键,并使用on delete cascade或on delete set null设定删除策略;3. 插入测试数据验证约束效果;4.…

    2026年9月28日 • 用户投稿
    000
  • 微信解除已绑定银行卡的操作方法(轻松解除绑定)

    微信解除已绑定银行卡的操作方法(轻松解除绑定)微信解除已绑定银行卡的操作方法(轻松解除绑定)微信解除已绑定银行卡的操作方法(轻松解除绑定)微信解除已绑定银行卡的操作方法(轻松解除绑定)

    在日常生活中,我们经常使用微信进行各种支付和转账操作,而绑定银行卡是实现这些功能的前提条件之一。然而,有时我们可能需要解除已绑定的银行卡,例如更换银行卡或者遗失银行卡等情况。本文将详细介绍如何通过微信轻松解除已绑定的银行卡,保障您的资金安全。 腾讯小微 基于微信AI智能对话系统打造的智能语音助手解决…

    2026年9月28日 • 用户投稿
    000
  • 雷军谈小米汽车 V8s 电机不用代工厂:免得被说是“供应商技术”

    雷军谈小米汽车 V8s 电机不用代工厂:免得被说是“供应商技术”雷军谈小米汽车 V8s 电机不用代工厂:免得被说是“供应商技术”雷军谈小米汽车 V8s 电机不用代工厂:免得被说是“供应商技术”雷军谈小米汽车 V8s 电机不用代工厂:免得被说是“供应商技术”

    9 月 25 日消息,今晚小米集团创始人、董事长兼 ceo 雷军在其年度公开演讲中表示,在 2021 年 9 月,小米汽车首次全员会上就公布了一个宏大的计划,要打造全球最强的纯电性能车。 “小米汽车一开始造车就提出了这么夸张的目标。今天我想一想都是初生牛犊不怕虎,要做全球最强,困难非常多。”雷军表示…

    2026年9月28日 • 用户投稿
    100
  • 深入理解Linux进程的组成结构

    深入理解Linux进程的组成结构深入理解Linux进程的组成结构深入理解Linux进程的组成结构深入理解Linux进程的组成结构

    Linux操作系统是一种开源的操作系统,被广泛应用于各种场景和领域中。在Linux系统中,进程是其核心概念之一,进程是程序的执行实例,是操作系统中最基本的执行单元。了解Linux进程的组成结构对于理解操作系统的工作原理和进行系统编程非常重要。本文将深入探讨Linux进程的组成结构,并通过具体的代码示…

    2026年9月28日 • 用户投稿
    000
  • AO3中文网页版应用下载通道 AO3中文网页版登录直达v1.5

    AO3中文网页版应用下载通道 AO3中文网页版登录直达v1.5AO3中文网页版应用下载通道 AO3中文网页版登录直达v1.5AO3中文网页版应用下载通道 AO3中文网页版登录直达v1.5AO3中文网页版应用下载通道 AO3中文网页版登录直达v1.5

    AO3中文网页版无需下载应用,直接访问官网archiveofourown.org,通过右上角“About”→“FAQ”切换中文界面,注册登录后即可浏览、评论、收藏,支持多维度分类检索与个性化标签筛选,提供流畅的跨设备阅读体验。 AO3中文网页版应用下载通道在哪里?这是不少网友都关注的,接下来由PHP…

    2026年9月28日 • 用户投稿
    000
  • 使用存储过程生成ID时出现重复值的解决方案

    使用存储过程生成ID时出现重复值的解决方案使用存储过程生成ID时出现重复值的解决方案使用存储过程生成ID时出现重复值的解决方案使用存储过程生成ID时出现重复值的解决方案

    在高并发环境中,使用存储过程生成ID时出现重复值是一个常见的问题。虽然在Java应用程序中使用了Spring的TransactionTemplate,并设置了SERIALIZABLE隔离级别,但仍然可能出现ID冲突。问题的根源可能在于事务管理不当,以及数据库表的锁定机制。 事务管理 首先,需要确认U…

    2026年9月28日 • 用户投稿
    100
  • xp虚拟内存最小值太低怎么办?

    xp虚拟内存最小值太低怎么办?xp虚拟内存最小值太低怎么办?xp虚拟内存最小值太低怎么办?xp虚拟内存最小值太低怎么办?

    我们在日常使用电脑的过程中,常常会遇到各类问题,比如有时候屏幕上会弹出“虚拟内存最小值过低”的提示信息。因此,今天我们就来聊聊关于winxp系统电脑出现这种提示的解决方法。 通常情况下,当我们电脑上开启了大量程序,像是游戏或者聊天软件等时,就可能会收到“虚拟内存最小值过低”的警告。如果系统的虚拟内存…

    2026年9月28日 • 用户投稿
    100
  • SublimeText4怎么安装_Sublime4新版本安装配置全攻略

    SublimeText4怎么安装_Sublime4新版本安装配置全攻略SublimeText4怎么安装_Sublime4新版本安装配置全攻略SublimeText4怎么安装_Sublime4新版本安装配置全攻略SublimeText4怎么安装_Sublime4新版本安装配置全攻略

    首先解压Sublime Text 4压缩包,运行安装程序并按向导完成安装;接着以管理员身份运行右键菜单脚本,输入1添加右键打开功能;然后通过发送到桌面创建快捷方式;最后复制补丁文件覆盖原程序实现免登录使用。 如果您下载了Sublime Text 4的安装包或压缩文件,但尚未完成软件的安装与配置,则需…

    2026年9月28日 • 用户投稿
    000
  • 通过MySQL开发实现分库分表与水平扩展的项目经验分享

    通过MySQL开发实现分库分表与水平扩展的项目经验分享通过MySQL开发实现分库分表与水平扩展的项目经验分享通过MySQL开发实现分库分表与水平扩展的项目经验分享通过MySQL开发实现分库分表与水平扩展的项目经验分享

    通过MySQL开发实现分库分表与水平扩展的项目经验分享 引言:随着大数据时代的到来,数据量的爆炸式增长使得传统的单机数据库已经无法满足业务需求。为了解决数据存储和查询的性能问题,分库分表与水平扩展成为了当下非常流行的技术。本文将分享一些通过MySQL开发实现分库分表与水平扩展的项目经验,希望对同样面…

    2026年9月28日 • 用户投稿
    000
  • ChatGPT如何优化剧本创作 ChatGPT戏剧冲突生成技巧

    ChatGPT如何优化剧本创作 ChatGPT戏剧冲突生成技巧ChatGPT如何优化剧本创作 ChatGPT戏剧冲突生成技巧ChatGPT如何优化剧本创作 ChatGPT戏剧冲突生成技巧ChatGPT如何优化剧本创作 ChatGPT戏剧冲突生成技巧

    本文将探讨如何利用ChatGPT来优化剧本创作,并分享ChatGPT在生成戏剧冲突方面的技巧。我们将首先概述ChatGPT在剧本创作中的潜力,然后深入讲解如何通过与ChatGPT的互动来打磨故事情节,特别是如何生成具有吸引力的戏剧冲突,为创作者提供实用可行的指导。 ☞☞☞AI 智能聊天, 问答助手,…

    2026年9月28日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信