@Builder
介绍
在 Java 中,@Builder 是 Lombok 库提供的一个注解,用于自动生成建造者模式(Builder Pattern)所需的代码。建造者模式是一种用于创建复杂对象的设计模式,它将对象的构造与表示分离,使得同样的构造过程可以创建不同的表示。@Builder 注解使这个过程更加简洁。
使用方式
1、添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
2、示例
示例 1:在类上使用 @Builder
在类上直接使用 @Builder 注解会为这个类生成一个包含所有字段的建造者:
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class Person {
private String firstName;
private String lastName;
private int age;
public static void main(String[] args) {
Person person = Person.builder()
.firstName("John")
.lastName("Doe")
.age(30)
.build();
System.out.println(person);
}
}
输出:
Person(firstName=John, lastName=Doe, age=30)
示例 2:在构造方法上使用 @Builder
也可以只为特定的构造方法或静态方法生成建造者。
import lombok.Builder;
import lombok.ToString;
@ToString
public class Vehicle {
private String make;
private String model;
private int year;
@Builder
public Vehicle(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
public static void main(String[] args) {
Vehicle vehicle = Vehicle.builder()
.make("Toyota")
.model("Camry")
.year(2023)
.build();
System.out.println(vehicle);
}
}
示例 3:在静态方法上使用 @Builder
使用 @Builder 注解静态方法时,需要配合 @Builder 的 builderMethodName 属性自定义构建方法的名称。
import lombok.Builder;
import lombok.ToString;
@ToString
public class Address {
private String city;
private String street;
private String zipCode;
@Builder(builderMethodName = "createAddress")
public static Address of(String city, String street, String zipCode) {
Address address = new Address();
address.city = city;
address.street = street;
address.zipCode = zipCode;
return address;
}
public static void main(String[] args) {
Address address = Address.createAddress()
.city("New York")
.street("5th Avenue")
.zipCode("10001")
.build();
System.out.println(address);
}
}
可选属性
builderMethodName:指定构建器方法的名称。默认值为 builder。
buildMethodName:指定最终生成对象的方法名称。默认值为 build。
toBuilder:布尔值,如果为 true,则生成 toBuilder 方法用于克隆对象并修改其字段。
setterPrefix:用于给所有设置方法加前缀,例如设置 setterPrefix = “with” 则生成 withAge 之类的方法。