写点什么

通过 Java Record 提升代码质量:简洁而健壮的数据对象

  • 2023-10-10
    福建
  • 本文字数:1448 字

    阅读完需:约 5 分钟

通过Java Record提升代码质量:简洁而健壮的数据对象

为了提高开发效率和代码可读性,Java 14 引入了一个新的特性 - Records(记录类型)。Records 旨在简化和改进 Java 中的数据类定义,使得创建简单的数据传输对象(DTO)或值对象更加便捷。

什么是 Java Record?

Java Record 是一种紧凑、不可变且自动生成常见方法的类定义方式。使用 record 关键字定义的类会自动根据声明的字段生成对应的私有字段和公共访问器方法(getter 方法),从而允许我们方便地获取和修改记录中的属性值。此外,Records 还自动生成了默认的 equals()、hashCode()和 toString()方法,大大减少了样板代码的书写。

优势和用法

  1. 简洁性:通过使用 Records,可以以更少的代码量定义数据类,避免了繁琐的样板代码。相较于传统的 POJO 类,Records 更加精炼,只需要列出字段即可,而无需手动编写访问器方法。

  2. 不可变性:Record 类的字段在实例化后无法修改,确保了不可变性。这有助于编写更安全且易于理解的代码,避免了意外的状态变化。

  3. 自动生成的方法:Record 类会自动生成默认的 equals()、hashCode()和 toString()等方法。equals()和 hashCode()方法基于定义的字段进行比较,toString()方法提供了记录的简洁字符串表示形式。这些方法可以直接使用,并且在不同的记录对象之间进行比较时非常方便。

  4. 适用场景:Java Record 适用于表示简单的数据结构,如 DTO、领域对象或一些不可变的值对象。对于复杂的业务逻辑或需要特定行为的类,传统的类定义方式可能更适合。

示例代码

下面是一个简单的例子来展示 Java Record 的用法:

record Person(String name, int age) {    // 可以在record内部添加其他方法或构造函数}
public class Main { public static void main(String[] args) { Person person = new Person("John", 25); System.out.println(person.name()); // 访问name字段 System.out.println(person.age()); // 访问age字段 System.out.println(person); // 自动生成的toString()方法
Person person2 = new Person("John", 25); System.out.println(person.equals(person2)); // 自动生成的equals()方法 }}
复制代码


在上述代码中,我们通过定义一个 Person 记录类型来表示一个人的信息。我们可以轻松地访问记录中的属性,并使用自动生成的 toString()和 equals()方法。

添加方法和构造函数示例

public record Person(String name, int age) {    public Person {        if (age < 0) {            throw new IllegalArgumentException("Age cannot be negative");        }    }
// 添加其他方法 public void greet() { System.out.println("Hello, my name is " + name + " and I am " + age + " years old."); }}
public class Main { public static void main(String[] args) { Person person = new Person("John", 25); person.greet(); // 自定义的greet()方法
// 尝试使用非法的年龄创建Person对象 try { Person invalidPerson = new Person("Alice", -30); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } }}
复制代码

总结

Java Record 是一项有用的语言特性,它简化了数据类的定义,减少了样板代码,并提供了一种更简洁和易于理解的方式来表示简单的数据结构。通过自动生成常用方法和字段访问器,Records 使得编写 Java 代码变得更加高效和优雅。然而,对于复杂的业务逻辑和需要特定行为的类,传统的类定义方式仍然是合适的选择。

发布于: 刚刚阅读数: 2
用户头像

IT领域从业者 分享见解 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
通过Java Record提升代码质量:简洁而健壮的数据对象_java 14_树上有只程序猿_InfoQ写作社区