Java 语言 Records类的3个简化技巧 自动生成方法与自定义构造

Java阿木 发布于 25 天前 8 次阅读


摘要:

Java 14引入了Records类,这是一种不可变的数据容器,类似于C中的记录类型。Records类提供了自动生成的方法和构造器,使得创建简单的数据结构变得更加简单和高效。本文将围绕Java Records类的自动生成方法和自定义构造这一主题,探讨三个简化技巧,帮助开发者更好地利用Records类。

一、

在Java中,创建简单的数据结构通常需要手动编写getter、setter、toString、equals和hashCode等方法。随着Java 14的发布,Records类应运而生,它简化了这一过程。通过使用Records类,我们可以轻松创建不可变的数据结构,并自动生成所需的方法。本文将介绍三个简化技巧,帮助开发者更好地利用Records类。

二、自动生成方法

1. 自动生成getter方法

当使用Records类创建一个记录时,Java编译器会自动为记录中的每个字段生成getter方法。这些方法允许我们访问记录的值,而不允许修改它们。

java

public record Person(String name, int age) {


// 自动生成的getter方法


public String getName() {


return name;


}

public int getAge() {


return age;


}


}


在上面的例子中,`Person`记录有两个字段:`name`和`age`。编译器会自动生成`getName()`和`getAge()`方法。

2. 自动生成toString方法

除了getter方法,Records类还会自动生成`toString()`方法,该方法返回记录的字符串表示形式。

java

public record Person(String name, int age) {


// 自动生成的toString方法


@Override


public String toString() {


return "Person{name='" + name + "', age=" + age + '}';


}


}


3. 自动生成equals和hashCode方法

Records类还会自动生成`equals()`和`hashCode()`方法,这些方法用于比较两个记录是否相等,并确保它们在哈希集合中保持良好的性能。

java

public record Person(String name, int age) {


// 自动生成的equals和hashCode方法


@Override


public boolean equals(Object o) {


if (this == o) return true;


if (o == null || getClass() != o.getClass()) return false;


Person person = (Person) o;


return age == person.age && Objects.equals(name, person.name);


}

@Override


public int hashCode() {


return Objects.hash(name, age);


}


}


三、自定义构造

尽管Records类提供了自动生成的方法,但在某些情况下,我们可能需要自定义构造器。以下是一些自定义构造的技巧:

1. 使用记录的构造器

我们可以使用记录的构造器来创建一个新的记录实例,并传递自定义的值。

java

public record Person(String name, int age) {


public Person {


if (name == null || name.trim().isEmpty()) {


throw new IllegalArgumentException("Name cannot be null or empty");


}


if (age < 0) {


throw new IllegalArgumentException("Age cannot be negative");


}


}


}


在上面的例子中,我们添加了自定义的构造器,用于验证`name`和`age`字段的值。

2. 使用记录的副本构造器

我们可以使用记录的副本构造器来创建一个新的记录实例,该实例基于现有的记录实例。

java

public record Person(String name, int age) {


public Person(Person other) {


this(other.name, other.age);


}


}


在上面的例子中,我们创建了一个新的`Person`记录,其值基于现有的`Person`记录。

3. 使用记录的静态工厂方法

我们可以使用静态工厂方法来创建记录实例,并在该方法中执行额外的逻辑。

java

public record Person(String name, int age) {


public static Person create(String name, int age) {


if (name == null || name.trim().isEmpty()) {


throw new IllegalArgumentException("Name cannot be null or empty");


}


if (age < 0) {


throw new IllegalArgumentException("Age cannot be negative");


}


return new Person(name, age);


}


}


在上面的例子中,我们使用了一个静态工厂方法`create`来创建`Person`记录,并在该方法中执行了验证逻辑。

四、结论

Java Records类为开发者提供了创建简单数据结构的强大工具。通过自动生成方法和使用自定义构造,我们可以简化代码并提高开发效率。本文介绍了三个简化技巧,帮助开发者更好地利用Records类。随着Java版本的不断更新,Records类可能会变得更加强大和灵活,为开发者带来更多便利。