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
中蕴含了Point
和Size
):
record Size(int width, int height) { }record Point(int x, int y) { }record WindowFrame(Point origin, Size size) { }
这个时候,如果想要拜访WindowFrame
中Size
的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。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源