关于java:Java-21-新特性Record-Patterns

10次阅读

共计 1074 个字符,预计需要花费 3 分钟才能阅读完成。

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

正文完
 0