RecordBuilder库使用Builder模式创建Java Record记录对象


添加依赖关系:

<dependency>
    <groupId>io.soabase.record-builder</groupId>
    <artifactId>record-builder-processor</artifactId>
    <version>${record.builder.version}</version>
    <scope>provided</scope>
</dependency>

代码:

@recordbuilder
public record Person(String firstname, String Lastnamei, nt age){}

Person p=Personbuilder.builder()
                 .age(20)
                 .firstname("Test")
                 .lastname ("Test")
                 .build();


背景
Java 16 虽然引入了记录,但它目前缺少一些通常在数据类中发现的重要功能:构建器和“with”er。这个项目是一个注释处理器,它创建:

  • Java 记录的配套构建器类
  • 添加“with”复制方法的接口
  • 从接口模板生成 Java 记录的注解

记录生成器示例

@RecordBuilder
public record NameAndAge(String name, int age){}

这将生成一个可以使用的构建器类:

// build from components
NameAndAge n1 = NameAndAgeBuilder.builder().name(aName).age(anAge).build();

// generate a copy with a changed value
NameAndAge n2 = NameAndAgeBuilder.builder(n1).age(newAge).build(); // name is the same as the name in n1

// pass to other methods to set components
var builder = new NameAndAgeBuilder();
setName(builder);
setAge(builder);
NameAndAge n3 = builder.build();

// use the generated static constructor/builder
import static NameAndAgeBuilder.NameAndAge;
...
var n4 = NameAndAge("hey", 42);

“with”复制方法的接口
如下代码:

@RecordBuilder
public record NameAndAge(String name, int age) implements NameAndAgeBuilder.With {}

记录接口示例

@RecordInterface
public interface NameAndAge {
    String name(); 
    int age();
}