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