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的资料请关注脚本之家其它相关文章!

相关文章

  • java 中同步、异步、阻塞和非阻塞区别详解

    java 中同步、异步、阻塞和非阻塞区别详解

    这篇文章主要介绍了java 中同步、异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • 详解Java sort()数组排序(升序和降序)

    详解Java sort()数组排序(升序和降序)

    这篇文章主要介绍了详解Java sort()数组排序(升序和降序),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • JavaMail入门教程之创建邮件(2)

    JavaMail入门教程之创建邮件(2)

    这篇文章主要介绍了JavaMail入门教程之创建邮件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Java后端中dto、vo、entity的区别浅析

    Java后端中dto、vo、entity的区别浅析

    这篇文章主要给大家介绍了关于Java后端中dto、vo、entity区别的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-01-01
  • java中获取类资源的方法总结

    java中获取类资源的方法总结

    在本篇文章里小编给大家整理的是关于java中获取类资源的方法总结,需要的朋友们可以学习参考下。
    2020-02-02
  • JVM调优OutOfMemoryError异常分析

    JVM调优OutOfMemoryError异常分析

    这篇文章主要为大家介绍了JVM调优OutOfMemoryError异常分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java中继承和组合的区别

    Java中继承和组合的区别

    这篇文章主要介绍了Java中继承和组合的区别,  继承是面向对象三大基本特征之一(继承,封装,多态),继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,需要的朋友可以参考下
    2023-07-07
  • java创建以任意图片为背景的窗口

    java创建以任意图片为背景的窗口

    这篇文章主要为大家详细介绍了java创建以任意图片为背景的窗口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Eclipse新建web项目流程图解

    Eclipse新建web项目流程图解

    这篇文章主要介绍了Eclipse新建web项目流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • spring boot自带图片服务器使用详解

    spring boot自带图片服务器使用详解

    这篇文章主要为大家详细介绍了spring boot自带图片服务器的使用 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08

最新评论