Ответ
@Builder — это аннотация Lombok, которая автоматически генерирует код для реализации паттерна Builder. Это удобный и безопасный способ создания объектов, особенно с множеством опциональных полей.
Базовый пример:
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class User {
private final Long id; // final поле
private String name;
private String email;
private int age;
}
// Использование:
User user = User.builder()
.id(1L)
.name("Alice")
.email("alice@example.com")
.age(30)
.build();
Расширенные возможности:
-
@Builderна методе: Позволяет создать билдер для конкретного конструктора или фабричного метода.public class Car { private String model; private int year; @Builder public static Car createCar(String model, int year) { Car car = new Car(); car.model = model; car.year = year; return car; } } // Использование: Car car = Car.createCarBuilder().model("Tesla").year(2023).build(); - Кастомизация имен методов:
@Builder(builderMethodName = "newBuilder", buildMethodName = "create") -
Наследование: Для классов с иерархией используйте
@SuperBuilder.@SuperBuilder public class Parent { private String parentField; } @SuperBuilder public class Child extends Parent { private String childField; } // Child child = Child.builder().parentField("A").childField("B").build();
Преимущества:
- Неизменяемость: Позволяет создавать immutable-объекты, если все поля
final. - Читаемость: Цепочка вызовов делает код создания объекта наглядным.
- Безопасность: Исключает ошибки, связанные с неправильным порядком аргументов конструктора.
Ограничение: Нельзя использовать @Builder вместе с @Data или @Value без явного определения всех полей в конструкторе.