Рубрики
Без рубрики

Lombok Builder с пользовательским сеттером

Посмотрите, как использовать сгенерированный конструктор Ломбоков с пользовательским сеттером.

Автор оригинала: baeldung.

1. введение

Project Lombok-это популярная библиотека Java, которая помогает уменьшить количество шаблонного кода, необходимого разработчику для написания.

В этом уроке мы рассмотрим, как работает аннотация Lombok @Builder и как мы можем настроить ее для наших конкретных потребностей.

2. Зависимость Maven

Давайте начнем с добавления зависимости к вашему pom.xml :


    org.projectlombok
    lombok
    1.18.10

3. Аннотация Lombok Builder

Прежде чем мы рассмотрим настройку сгенерированного класса конструктора Lombok, давайте кратко рассмотрим, как работает аннотация Lombok @Builder . У нас уже есть полное введение в особенности Ломбока.

Аннотацию @Builder можно использовать для автоматического создания конструктора для нашего класса . В нашем примере мы будем использовать систему обмена сообщениями, в которой один пользователь может отправить сообщение другому пользователю. Сообщение представляет собой либо простую текстовую строку, либо файл /. Используя Ломбок, мы можем определить наш Message класс следующим образом:

@Builder
@Data
public class Message {
    private String sender;
    private String recipient;
    private String text;
    private File file;
}

@Data генерирует все шаблоны, которые обычно связаны с простым POJO (обычный старый объект Java): геттеры для всех полей, сеттеры для всех не окончательных полей и соответствующие toString , equals и hashCode реализации, а также конструктор.

Используя сгенерированный конструктор, теперь мы можем создавать экземпляры нашего класса Message :

Message message = Message.builder()
  .sender("[email protected]")
  .recipient("[email protected]")
  .text("How are you today?")
  .build();

Аннотация @Builder также поддерживает значения по умолчанию для атрибутов, но мы не будем вдаваться в это сейчас. Из этого примера должно быть ясно, что аннотация @Builder довольно мощная и может заменить много шаблонного кода.

4. Настройка строителей Ломбока

В предыдущем разделе было показано, как мы можем использовать Lombok для создания класса builder. Но могут быть случаи, когда сгенерированного конструктора недостаточно. В нашем примере у нас есть ограничение, что сообщение может содержать только текст или файл. У него не может быть и того, и другого. Ломбок, конечно, этого не знает, и сгенерированный строитель с радостью позволит нам попасть в это незаконное состояние.

К счастью, мы можем решить эту проблему, настроив конструктор.

Настройка конструктора Lombok проста и понятна: мы пишем части конструктора, которые хотим настроить, и аннотация Lombok @Builder просто не будет генерировать эти части . Таким образом, в нашем примере это было бы:

public static class MessageBuilder {
    private String text;
    private File file;

    public MessageBuilder text(String text) {
        this.text = text;
        verifyTextOrFile();
        return this;
    }

    public MessageBuilder file(File file) {
        this.file = file;
        verifyTextOrFile();
        return this;
    }

    private void verifyTextOrFile() {
        if (text != null && file != null) {
            throw new IllegalStateException("Cannot send 'text' and 'file'.");
        }
    }
}

Пожалуйста, обратите внимание, что нам не нужно было объявлять отправителя и получателя участников или методы компоновщика, связанные с ними. Ломбок все равно будет генерировать их для нас.

Если мы попытаемся сгенерировать экземпляр Message как с текстом, так и с файлом со следующим кодом:

Message message = Message.builder()
  .sender("[email protected]")
  .recipient("[email protected]")
  .text("How are you today?")
  .file(new File("/path/to/file"))
  .build();

Это приведет к следующему исключению:

Exception in thread "main" java.lang.IllegalStateException: Cannot send 'text' and 'file'.

5. Заключение

В этой краткой статье мы рассмотрели, как настроить конструктор Ломбоков.

Как всегда, код доступен на GitHub .