Java21新特性Record Patterns示例详解

 更新时间:2023年09月22日 10:02:24   作者:程序猿DD  
这篇文章主要为大家介绍了Java21新特性Record Patterns示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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中包含了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);
}

是不是一下感受到这个新特性的强大了?

以上就是Java21新特性Record Patterns的详细内容,更多关于Java Record Patterns的资料请关注脚本之家其它相关文章!

相关文章

  • 详解spring cloud使用Hystrix实现单个方法的fallback

    详解spring cloud使用Hystrix实现单个方法的fallback

    本篇文章主要介绍了详解spring cloud-使用Hystrix实现单个方法的fallback,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • java控制台输出图书馆管理系统

    java控制台输出图书馆管理系统

    这篇文章主要为大家详细介绍了java控制台输出图书馆管理系统,只用java代码不用数据库和GUI等,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 修改SpringBoot启动图标banner的两种方式

    修改SpringBoot启动图标banner的两种方式

    Banner即横幅标语,我们在启动SpringBoot项目时会将Banner信息打印至控制台,我们可以输出一些图形、SpringBoot版本信息等内容,有很多小伙伴想知道如何修改SpringBoot启动图标banner,接下来由小编给大家介绍一下吧
    2024-08-08
  • Java Springboot的目的你知道吗

    Java Springboot的目的你知道吗

    在本篇文章中小编给大家分析了Java中Spring Boot的优势以及相关知识点内容,兴趣的朋友们可以学习参考下,希望能够给你带来帮助
    2021-09-09
  • spring boot实现超轻量级网关的方法(反向代理、转发)

    spring boot实现超轻量级网关的方法(反向代理、转发)

    这篇文章主要介绍了spring boot实现超轻量级网关(反向代理、转发)的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Spring BeanName 的自动生成原理示例详解

    Spring BeanName 的自动生成原理示例详解

    这篇文章主要介绍了Spring BeanName 的自动生成原理示例详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Springboot集成Kafka实现producer和consumer的示例代码

    Springboot集成Kafka实现producer和consumer的示例代码

    这篇文章主要介绍了Springboot集成Kafka实现producer和consumer的示例代码,详细的介绍了什么是Kafka和安装Kafka以及在springboot项目中集成kafka收发message,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Spring boot 实现单个或批量文件上传功能

    Spring boot 实现单个或批量文件上传功能

    这篇文章主要介绍了Spring boot 实现单个或批量文件上传功能,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • Java 使用POI生成带联动下拉框的excel表格实例代码

    Java 使用POI生成带联动下拉框的excel表格实例代码

    本文通过实例代码给大家分享Java 使用POI生成带联动下拉框的excel表格,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09
  • 搭建maven私有仓库的方法实现

    搭建maven私有仓库的方法实现

    Maven是一个流行的Java项目管理工具,它可以帮助我们管理项目的构建、报告和文档,本文主要介绍了搭建maven私有仓库的方法实现,感兴趣的可以了解一下
    2023-05-05

最新评论