醋醋百科网

Good Luck To You!

Java 中的 DTO 与 Record:什么是 Java Record?



一、什么是 Java Record?

Java Record 是一种特殊的类,于 Java 14 中作为预览特性引入,并在 Java 16 中正式发布。它们简化了不可变数据载体的创建。Record 的设计目的是以简洁且易读的方式保存数据,并且消除了传统类(如 DTO)所需的大部分样板代码。




在传统的 DTO 中,你需要手动编写构造函数、getter、equals()、hashCode() 和 toString() 方法(正如我们之前所做的)。而使用 Record,Java 会自动为你生成所有这些内容。这使得它们非常适合那些主要任务是携带数据的简单、不可变对象。


二、Java Record 的关键特性

如下是Java Record的关键特性

  • 默认不可变:一旦创建了 Record,你就无法更改其数据(与通常可变的 DTO 不同)。
  • 简洁的语法:你声明字段后,Java 会自动生成构造函数、getter、equals()、hashCode() 和 toString()。
  • 没有 setter:由于 Record 是不可变的,因此它们不提供 setter。


让我们创建一个 UserRecord,它与我们之前创建的 UserDTO 保存相同的数据,但使用 Record:

public record UserRecord(String name, int age, String email) {
}


仅此而已!Java 会自动生成:

  • 一个 构造函数:new UserRecord(String name, int age, String email)
  • Getter,针对每个字段:name()、age() 和 email()
  • 一个 equals() 方法,用于比较两个 UserRecord 对象。
  • 一个 hashCode() 方法,用于生成唯一的哈希码。
  • 一个 toString() 方法,返回类似这样的字符串表示:UserRecord[name=xxx, age=25, email=xxx@example.com]


以下是如何使用 UserRecord:

public class UserRecordUsageExample {
 public static void main(String[] args) {
 UserRecord user = new UserRecord("xxx", 25, "xxx@example.com");
 // 访问数据
 System.out.println(user.name());
 System.out.println(user.age());
 System.out.println(user.email());
 // 使用 toString() 方法
 System.out.println(user);
 // 比较记录
 UserRecord anotherUser = new UserRecord("yyy", 22, "yyy@example.com");
 System.out.println(user.equals(anotherUser));
 }
}


使用 UserRecord,我们避免了手动编写 getter、构造函数、equals()、hashCode() 和 toString()。Java Record 提供了一种简洁、清晰的方式来创建仅用于携带数据的不可变对象。


为什么要使用 Record?

  • 减少样板代码:你无需编写重复的代码,如 getter 或 equals() 方法。
  • 默认不可变:确保数据在对象创建后无法更改,使其在多线程环境中更加安全。
  • 明确意图:使用 Record 明确表明该对象仅用于携带数据,而没有额外的行为或逻辑。

#夏日生活打卡季##java##record#

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言