首页 > 图灵资讯 > 技术篇>正文

每个 Java 开发人员都必须了解的 Java 中的模式匹配和记录变化

2024-08-14 10:53:51

每个 java 开发人员都必须了解的 java 中的模式匹配和记录变化

随着 Java 16 发布,记录(JEP 引入395)带来了很大的改进,它允许以更简单、更简洁的方式声明主要用于携带数据的类别。现在,通过添加模式匹配和记录 (JEP 406),这一改进在于 Java 21 进一步加强。这个新功能允许使用模式匹配来测试一个值是否 Record 类的例子,并以更简化的方式提取其组件。在这篇文章中,我们将讨论它 Java 21 模式匹配和记录的变化及其如何使用 Java 开发人员受益。

作为数据的透明载体记录 Java 16 引入的记录主要用于存储和携带数据。它们是透明的载体,这意味着它们的主要目的是保存所有其他功能(如构造函数、方法和 equals/hashCode 方法)由编译器根据记录中定义的数据字段自动生成。这使得它们非常适合在需要序列化或通过网络发送数据的场景中使用。

考虑两个定义 X 和 Y 坐标的 Line 类的示例:

记录 Line(int x, int y) {}

要使用这个,我们只需要创建它 Line 使用内置组件访问器的实例和方法 x() 和 y() 访问其数据字段:

立即学习“Java免费学习笔记(深入);

Line line = new Line(0, 10); int x = line.x(); int y = line.y(); System.out.println("X: " + x + ", Y: " + y); // 输出:X:0,Y:10

匹配记录模式 在 Java 21 在中间,添加了模式匹配,可以测试一个值是否 Record 类的例子并以更简化的方式提取其组件。该功能在处理广泛使用记录的大型代码库时特别有用。

考虑以下示例,我们需要测试一个对象是否是一个对象 Line 类实例并提取其组件:

静态无效长度(对象 obj){ if (obj instanceof Line l) { int x = l.x(); int y = l.y(); System.out.println(y-x); } } 正如你所看到的,我们使用类型模式来测试对象是否是 Point 例如,如果是这样,我们将通过调用内置组件访问器来提取其组件。这个代码虽然有效,但可以使用 Java 21 记录模式进一步简化。

使用记录模式,我们不仅可以测试一个值是否 Record 类实例也可以通过一行代码提取其组件。这是通过将提取组件的局部变量声明提升到模式本身,并在值与模式匹配时调用访问器来初始化这些变量来实现的。

考虑以下使用记录模式的代码:

静态无效长度(对象 obj){ if (obj instanceof Line(int x, int y)) { System.out.println(y-x); } } 这个代码更简洁可读。我们不再需要创建新对象并调用其组件访问器来获取数据。记录模式直接为我们提取和初始化组件,使我们的代码更加简化。

嵌套记录模式 开发人员面临的主要挑战之一是处理复杂的对象图并提取数据。这是模型匹配的真正力量,因为它允许我们优雅地扩展和匹配更复杂的对象图。

考虑以下类别:Employee、Department(枚举)和 Company(记录)。我们可以使用记录模式 Company 对象中提取员工的部门:

// 从 Java 21 开始 static void printEmployeeDepartment(公司 c, 字符串名称) { if (c instanceof Company(部门 dept, List 员工)) { 对于(员工 e:员工){ if (e.getName().equals(name)) { System.out.println(name + " 位于 " + dept + " 部门。"); 返回; } } } System.out.println(name + "未找到。"); } 在这个例子中,我们使用嵌套模式 Company 对象中提取 Employee 的部门。我们检查给定的 Company 目标是否有部门和员工列表,然后循环列表以查找具有给定名称的员工。如果我们找到员工,我们会打印他们的部门。如果没有,我们会打印一条信息,指出没有找到员工。

嵌套模式也可以用来匹配和解构我们想要的多个值。考虑到以下示例,我们需要检查给定的坐标是否在矩形中:

//从 Java 21 开始 记录点(双x,双y){}

记录矩形(左上点,右下点){} // 检查给定点是否在给定矩形内 static boolean isPointInsideRectangle(点 p, 矩形 r) { if (r 矩形实例(Point(var x1, var y1), Point(var x2, var y2))) { if (p.x() > x1 && p.y() > y1 && p.x() 返回真; } } 返回错误; }

在这个例子中,我们使用嵌套模式来检查给定的模式 Point 对象是否落在给定的位置 Rectangle 在对象范围内。嵌套模式允许我们访问矩形左上角和右下角 x 和 y 无需编写多行代码的坐标。

总之,通过在 Java 21 匹配和记录中添加模式 (JEP 406),我们在处理复杂物体和从复杂物体中提取数据方面有了显著的改进。该功能极大地简化了代码,使其更具可读性和简洁性。它还可以帮助处理模式匹配可能失败的故障场景。通过这些变化,Java 21 继续使代码更加简化和改进 Java 开发者的开发体验。

通过 MyExamCloud 的 Java SE 21 开发人员专业实践测试升级您 Java 21 技能。发展和测试你的知识,成为 Java 21 专家。

以上就是每一个 Java 开发人员必须知道 Java 更多关于图灵教育的其他相关文章,请关注模式匹配和记录变化的详细内容!

上一篇 java框架如何支持不同设备和操作系统的API兼容性?
下一篇 返回列表

文章素材均来源于网络,如有侵权,请联系管理员删除。