Как запустить код после конструктора в сборщике Lombok
======================================================

У меня есть класс, который я хочу использовать Lombok.Builder, и мне нужна предварительная обработка некоторых параметров. Что-то вроде этого:

обычно я бы просто позвонил`init()` на конструкторе NoArg, но с сгенерированным конструктором я не могу это сделать. Есть ли способ для этого`init` быть вызванным сгенерированным строителем? Например`build()` будет генерировать код вроде:

Я знаю, что могу вручную кодировать`all args` конструктор, что строитель будет звонить через него, и я могу позвонить`init` внутри

Но это неоптимальное решение, так как мой класс, вероятно, будет время от времени добавлять новые поля, что также означало бы изменение конструктора.

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

Раскрытие информации: я разработчик ломбок.



 расширил генератор сгенерированных и вызвал`init()` себя.

Пример:



 я хотел добавить метод`buildOptional()` застройщику не повторить`Optional.of(Foo)` каждый раз, когда мне это нужно. Это не сработало с ранее опубликованным подходом, потому что цепочечные методы возвращают`FooInternalBuilder` объекты; и положить`buildOptional()` в`FooInternalBuilder` пропустит`init()` выполнение метода в`Builder`...

Также лично мне не понравилось наличие 2 классов строителей.

Вот что я сделал вместо этого:

Вы можете сделать быстрый тест с помощью этого основного метода:

Сделав так, давайте добавим то, что я хочу:

Добавить`init()` метод, который выполняется после каждой постройки объекта автоматическиДобавление новых полей не требует дополнительной работы (как это было бы для индивидуально написанного конструктора)Возможность добавления дополнительных функций (в том числе`init()` исполнение)Сохраните полную стандартную функциональность`@Builder` аннотация приноситНе подвергайте дополнительный класс строителяДаже если вы решили свою проблему, прежде чем я хотел бы поделиться этим в качестве решения. Это немного короче и добавляет (для меня) приятную особенность.



Это работает для меня, не полное решение, но быстро и легко.