Да, lombok builder не будет создавать неизменяемые экземпляры, если пользователь определяет параметры в классе как final
, в соответствии с документами из lombok.builder @Builder
позволяет автоматически создавать код, необходимый для класс может быть создан с помощью кода, такого как:
Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
В соответствии с документами он просто создает внутренний класс stati c с теми же свойствами, что и внешний класс
Метод, аннотированный @Builder (отныне называемый целью), генерирует следующие 7 вещей:
- Внутренний класс stati c с именем FooBuilder, с тем же введите аргументы в качестве метода stati c (называемого компоновщиком).
- В компоновщике: по одному частному non-stati c неконечному полю для каждого параметра цели.
- В компоновщике: закрытый конструктор пакета без аргументов.
- В компоновщике: метод, подобный сеттеру, для каждого параметра цели: он имеет тот же тип, что и этот параметр это и то же имя. Он возвращает самого построителя, так что вызовы установщика могут быть связаны
- В построителе: метод build (), который вызывает метод, передавая каждое поле. Он возвращает тот же тип, что и цель:
- В конструкторе: разумная реализация toString ().
- В классе, содержащем цель: метод builder (), который создает новый экземпляр построителя.
Но использование @ Singular с аннотацией @Builder
для свойств коллекции делает их одноэлементными
Путем аннотирования одного из параметров ( если аннотировать метод или конструктор с помощью @Builder) или поля (если аннотировать класс с помощью @Builder) аннотацией @Singular, lombok будет обрабатывать этот узел-конструктор как коллекцию и генерирует 2 метода «сумматора» вместо «сеттера» метод. Один, который добавляет один элемент в коллекцию, и один, который добавляет все элементы другой коллекции в коллекцию. Никакой установщик, который просто устанавливает коллекцию (заменяя все, что уже было добавлено), не будет создан.
@ Singular можно применять только к типам коллекций, известным lombok.