Java 21 新特性:Record Patterns
Record Patterns 第一次发布预览是在JDK 19、随后又在JDK 20中进行了完善。现在,Java 21开始正式推出该特性优化。下面我们通过一个例子来理解这个新特性。
record Point(int x, int y) {}
static void printSum(Object obj) {
if (obj instanceof Point p) {
int x = p.x();
int y = p.y();
System.out.println(x+y);
}
}
上述代码中定义了一个名为Point的record类(Java 16中的新特性),如果我们想要获取、操作或者打印Point中的x和y的话。就不得不先完成类型判断和类型转换。所以,这里为了实现x+y总共需要4行代码。而在Java 21之后,只需要2行代码就能完成:
static void printSum(Object obj) {
if (obj instanceof Point(int x, int y)) {
System.out.println(x+y);
}
}
可以看到,类型判断、类型转换、record值的结构都一气呵成了,所以代码量得到了简化。
嵌套record的解构
假设有下面一组嵌套的record结构(WindowFrame中包含了Point和Size):
record Size(int width, int height) { }
record Point(int x, int y) { }
record WindowFrame(Point origin, Size size) { }
这个时候,如果想要访问WindowFrame中Size的height,根据之前案例的理解,我们可以这样写:
if (obj instanceof WindowFrame wf) {
if (wf.size() != null) {
System.out.println("Height: " + wf.size().height());
}
}
好像也没有很简单,但实际上还有更简单的写法,因为record的解构是可以嵌套的,直接这样一步完成即可:
if (obj instanceof WindowFrame(Point origin, Size(int width, int height))) {
System.out.println("Height: " + height);
}
是不是一下感受到这个新特性的强大了?如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性专栏!
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
Java 21 新特性:Record Patterns的更多相关文章
- Java 16 新特性:record类
以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类.record关键词的引入,主要是为了提供一种更为简洁.紧凑的final类的定义方式. ...
- Java 8新特性探究(八)精简的JRE详解
http://www.importnew.com/14926.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 ...
- Java 8新特性之旅:使用Stream API处理集合
在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda ...
- [转帖]Java 8新特性探究(八)精简的JRE详解
Java 8新特性探究(八)精简的JRE详解 https://my.oschina.net/benhaile/blog/211804 精简版的api 撸了今年阿里.网易和美团的面试,我有一个重要发 ...
- IBM Developer:Java 9 新特性概述
Author: 成富 Date: Dec 28, 2017 Category: IBM-Developer (20) Tags: Java (27) 原文地址:https://www.ibm.com/ ...
- Java 8 新特性——检视阅读
Java 8 新特性--检视阅读 参考 Java 8 新特性--菜鸟 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的 ...
- Java 8 新特性——实践篇
Java 8 新特性--实践篇 参考 Java8新特性 重要更新:Lambda 表达式和Stream API Lambda 表达式 Lambda 表达式引入之前: 举个场景例子:当我们要对一个班级里的 ...
- Java 8新特性-4 方法引用
对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容! Java 8的方法引用定义了四种格式: 引用静态方法 ClassName :: staticMetho ...
- Spring 4支持的Java 8新特性一览
有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览S ...
- java 8 新特性
最近在IDEA的️驱使下,看了点java8的东西,链接贴一下,,,,, 1.Java 8新特性概述2.Java 8中的 Stream API 详解[3.Java 8新特性终极指南] 简单的使用看完新特 ...
随机推荐
- Python Excel 操作 | xlrd+xlwt 模块笔记
Python 的pandas模块使用xlrd作为读取 excel 文件的默认引擎.但是,xlrd在其最新版本(从 2.0.1 版本开始)中删除了对 xls 文件以外的任何文件的支持. xlsx fil ...
- selenium-wire简介
一.简介 以下来自chatGPT回答: selenium-wire是一个基于selenium的Python库,它扩展了selenium的功能,使得我们可以在自动化测试中直接访问和修改浏览器的网络请求和 ...
- 自然语言处理 Paddle NLP - 词向量应用展示
词向量(Word embedding),即把词语表示成实数向量."好"的词向量能体现词语直接的相近关系.词向量已经被证明可以提高NLP任务的性能,例如语法分析和情感分析. Padd ...
- Spring Boot实现高质量的CRUD-5
(续前文) 9.Service实现类代码示例 以用户管理模块为例,展示Service实现类代码.用户管理的Service实现类为UserManServiceImpl.UserManServi ...
- Uniapp下GoEasy通知栏推送不工作问题排查记录
我们是uniapp开发的app,项目中的系统消息推送使用的是GoEasy Websocket 实时推送,上线一段时间后,客户反馈说,当app没有在前台运行时也需要想办法通知用户一些重要的系统通知.那么 ...
- 通用权限系统-Spring-Boot-Starter
Spring-Boot-Starter 自定义Starter 案例一:读取application.yml中的参数 1.创建 1.创建maven工程hello-spring-boot-starter 2 ...
- mysql高级进阶(存储过程、游标、触发器)
废话不多说,直接进入正题... 一.存储过程 a.概述 存储过程可以看成是对一系列 SQL 操作的批处理: 使用存储过程的好处 代码封装,保证了一定的安全性: 代码复用: 由于是预先编译,因此具有很高 ...
- Python 潮流周刊第 11 期(2023-07-15)
查看全文:Python潮流周刊#11:如何使用 Golang 运行 Python 代码? 文章&教程 1.使用 Golang 和 Docker 运行 Python 代码 2.答案在代码中:&q ...
- Composer 镜像原理 (2) —— composer.json
相关文章 Composer 镜像原理 (1) -- 初识 Composer Composer 镜像原理 (2) -- composer.json Composer 镜像原理 (3) -- 完结篇 有使 ...
- Ubuntu16.04配置NTP时间同步
环境 查看系统版本:lsb_release -a 名词解释 PDT是指太平洋夏令时(Pacific Daylight Time),是美国西部地区和加拿大的一部分地区使用的时区.它位于UTC-7和UTC ...