服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java 21 新特性:Record Patterns

Java 21 新特性:Record Patterns

2023-09-29 04:00未知服务器之家 Java教程

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

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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

延伸 · 阅读

精彩推荐
  • Java教程Java 容器化有哪些好处?

    Java 容器化有哪些好处?

    Java容器化是将Java服务或应用程序打包到软件容器中的过程,通常包括执行该包所需的一切。容器通常用于创建基于微服务的应用程序,并允许在应用程序...

    粤嵌教育5072022-01-07
  • Java教程总结Java常用排序算法

    总结Java常用排序算法

    在本文里我们给大家整理了关于Java常用排序算法以及实例代码分析,需要的朋友们跟着学习下。...

    Java教程网6982021-07-17
  • Java教程java 读取网页内容的实例详解

    java 读取网页内容的实例详解

    这篇文章主要介绍了java 读取网页内容的实例详解的相关资料,希望通过本文能帮助到大家,让大家学习理解这部分内容,需要的朋友可以参考下...

    yongh7015792021-01-10
  • Java教程使用Spring方法拦截器MethodInterceptor

    使用Spring方法拦截器MethodInterceptor

    这篇文章主要介绍了使用Spring方法拦截器MethodInterceptor,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    淡淡的倔强6712022-03-02
  • Java教程java抓取网页或文件中的邮箱号码

    java抓取网页或文件中的邮箱号码

    这篇文章主要为大家详细介绍了java如何抓取网页或文件中的邮箱号码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    java大渣渣5232020-09-03
  • Java教程Java用正则表达式实现${name}形式的字符串模板实例

    Java用正则表达式实现${name}形式的字符串模板实例

    这篇文章主要给大家介绍了Java如何用正则表达式实现${name}形式的字符串模板,文章给出详细的实例代码,对大家的理解和学习会很有帮助,有需要的朋友...

    daisy5982020-07-15
  • Java教程SpringCloud的JPA连接PostgreSql的教程

    SpringCloud的JPA连接PostgreSql的教程

    这篇文章主要介绍了SpringCloud的JPA接入PostgreSql 教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    之诚10882021-09-16
  • Java教程java使用异或对文件进行加密解密

    java使用异或对文件进行加密解密

    这篇文章主要为大家详细介绍了java使用异或方式对文件进行加密解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    百无1用是书生12072021-07-24