@Builder 是 Lombok 库中的一个基础注解,用于简化构建器模式的使用。通过 @Builder,我们可以自动为类中的每个公共构造函数生成一个构建器方法,这样就可以通过这些方法来创建类的实例。 实际应用场景和示例: 假设我们有一个 Person
类,它有 name
、age
和 gender
三个字段。我们想要创建一个 Person
对象的构建器,可以使用 @Builder 注解。
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class Person {
private String name;
private int age;
private String gender;
}
现在,我们可以使用 PersonBuilder
类来创建 Person
对象。
Person person = Person.builder()
.name("John")
.age(30)
.gender("Male")
.build();
通过使用 @Builder,我们简化了创建 Person
对象的过程,避免了手动编写每个字段的 setter 方法。同时,这也减少了代码的冗余,提高了代码的可读性和可维护性。 @Builder.Default 是 Lombok 库中 @Builder 注解的一个选项,用于指定某些字段的默认值。通过使用 @Builder.Default,我们可以为 Builder 中的某些字段设置默认值,而不需要在每次调用 Builder 方法时都指定这些值。这使得代码更加简洁,减少了重复的代码。 示例: 假设我们有一个 Car
类,它有 brand
、model
和 year
三个字段。我们想要为 brand
字段设置默认值为 “Toyota”,并为 year
字段设置默认值为当前年份。我们可以使用 @Builder.Default 注解来实现这个需求。
import lombok.Builder;
import lombok.Getter;
import java.time.LocalDate;
@Getter
@Builder(toBuilder = true) // toBuilder = true 表示启用 toBuilder() 方法,用于链式调用修改已有对象的状态
public class Car {
private String brand;
private String model;
private int year;
@Builder.Default
private String defaultBrand = "Toyota"; // 设置默认值为 "Toyota"
@Builder.Default
private int defaultYear = LocalDate.now().getYear(); // 设置默认值为当前年份
}
现在,我们可以使用 Car 的 Builder 来创建 Car 对象,并自动应用默认值。
Car car = Car.builder()
.model("Corolla") // 只指定了 model 字段的值,其他字段将使用默认值
.build(); // 创建 Car 对象时会自动应用默认值 "Toyota" 和当前年份作为 year 字段的值