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