Java 21 新特性:Record Patterns

news/发布时间2024/5/20 14:27:52

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中包含了PointSize):

record Size(int width, int height) { }
record Point(int x, int y) { }
record WindowFrame(Point origin, Size size) { }

这个时候,如果想要访问WindowFrameSize的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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/61711444.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

2020ICPC区域赛南京站

2020ICPC区域赛南京站 K Co-prime Permutation 解题思路: 首先,根据样例2不难发现,\(k\)的下界为\(1\),因为1和排列中的任何数都会互质。 其次,我们考虑下上界大概是多少,也就是\(k = n\)是否一定合法。 假设,我们有一个初识排列\(p_i = i\).此时我们有\(1\)个元素和他的…

Odoo看板视图实践案例

看板视图是一个很常见的可视化解决方案了,例如:联系人卡片,任务卡片,还有二次元朋友们经常逛的哔站。 我个人也是非常喜欢看板视图,比起那些呆板的tree视图,看板视图给人的感觉的就是简洁直观又好看。 本人也是初学Odoo一个月,其中深意只知其一,但也想跟各位大佬分享交…

在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点

目录饮食数据创建节点 根据疾病、症状,判断出哪些饮食不能吃,哪些建议多吃 饮食数据 foods_data.csv 建议值用“”引起来。避免中间有,号造成误识别 饮食 "辣椒" "大蒜" "芥末" "海鲜" "胡萝卜" "核桃仁" &quo…

面试问题之如何解释微服务

这次的面试还是感觉非常愉快,没有那么憋屈,问的问题也非常有意思。 问题 假设现在有一个人完全不懂微服务,你能和对方解释下什么是微服务吗?面试回答 这个问题如果要完全回答好,感觉不是那么容易。 什么是微服务 很多人都知道现代的开发流程多是前后端分离,后端采用部署服…

Java 8 和 11 开始提供的新特性面试

说下 Lambda function Lambda 是 JDK 8 以后的版本才提供的功能。 在 JDK 8 之前是没有的。 Java Lambda表达式 的一个重要用法是简化某些匿名内部类 (Anonymous Classes )的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic 指令来实现La…

Java 消息策略的实现 - Kafak 是怎么设计的

这个也是开放讨论题,主要讨论下 Kafka 在消息中是如何进行实现的。总结 这个题目的开发性太强了。 Kafka 可以用的地方非常多,我经历过的项目有 Kafka 用在消息处理策略上的。这个主要是 IoT 项目,因为这个项目需要对温度传感器采集获得数据。 当我们有多个数据采集点的时候…