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 .