关于java: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中蕴含了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。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理