Java 什么是Records,以及如何与构造函数和方法一起使用

Java 什么是Records,以及如何与构造函数和方法一起使用

介绍

Java不断发展以满足现代编程需求,其中最新的功能之一,Java Records,在JDK 16中引入,简化了数据建模的任务。本文介绍了Java Records的工作原理,以及它们如何与构造函数和方法一起使用来简化您的Java编码体验。

理解Java Records

Java Records是一种类的类型,旨在简化应用程序中“纯数据”的表示。它们本质上是不可变的数据载体,用于封装一些最终字段(称为“组件”)以及访问它们的方法。

在引入Records之前,开发人员必须为简单的数据载体类编写大量的样板代码,包括构造函数、getter方法、equals()、hashCode()和toString()方法。Java Records消除了这种冗余的需要,使代码更加清晰和可读。

声明一个Record

Java Record的声明方式与类类似,使用record关键字。以下是一个示例:

Vpublic record User(String name, int age) {}

在上述声明中,User是Record,name和age是组件。默认情况下,Record生成一个公共构造函数,公共读取访问器方法(类似于getter方法),以及equals()、hashCode()和toString()方法。

Java Records和构造函数

虽然Records自动提供公共构造函数,但如果要为组件添加验证或标准化逻辑,可以声明显式构造函数。显式构造函数必须与记录组件具有相同的参数。这是一个示例 –

public record User(String name, int age) {
   public User {
      if (age < 0) {
         throw new IllegalArgumentException("Age cannot be negative");
      }
      if (name == null || name.isBlank()) {
         throw new IllegalArgumentException("Name cannot be blank");
      }
   }
}

在这个示例中,构造函数检查年龄是否为负数,名称是否为空,如果满足任一条件就会抛出异常。

Java Records 和方法

与普通类一样,Record 可以包含额外的方法。但是请记住,Record 的主要目标是用于携带数据,因此建议限制额外方法的数量。以下是如何向 Record 添加方法:

public record User(String name, int age) {
   public boolean isAdult() {
      return age >= 18;
   }
}

在上面的代码中,我们向User Record添加了isAdult()方法,该方法基于年龄组件检查用户是否成年。

Java Records的限制

虽然Records有其优点,但它们也具有一定的限制 −

  • Records是隐式final的,因此不能被扩展。

  • Records不能包含非final字段。

  • Record的每个组件必须可以从构造参数提供的状态中明确推导出来。

  • Records意在作为简单的数据携带者,因此不应该过于复杂或拥有过多的方法。

结论

Java Records是创建简单、不可变的数据携带类的强大工具,可以减少样板代码并提高代码可读性。它们与构造函数和方法无缝协作,为简化编程模型提供了帮助。随着您在Java中的旅程继续,拥抱和利用Records的力量无疑会带来益处。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程