Создайте объект из существующего с помощью ломбока
Допустим, у меня есть аннотированный класс lombok, например
@Builder
class Band {
String name;
String type;
}
Я знаю, что могу сделать:
Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();
Есть ли простой способ создать объект Foo с использованием существующего объекта в качестве шаблона и изменить его свойства?
Что-то вроде:
Band nirvana = Band.builder(rollingStones).name("Nirvana");
Я не могу найти это в документации ломбока.
Ответы
Ответ 1
Вы можете использовать параметр toBuilder
чтобы предоставить вашим экземплярам метод toBuilder()
.
@Builder(toBuilder=true)
class Foo {
int x;
...
}
Foo f0 = Foo.builder().build();
Foo f1 = f0.toBuilder().x(42).build();
Из документации:
Если вы используете @Builder для создания сборщиков для создания экземпляров вашего собственного класса (это всегда так, если не добавлять @Builder к методу, который не возвращает ваш собственный тип), вы можете использовать @Builder (toBuilder = true), чтобы также генерировать метод экземпляра в вашем классе, называемый toBuilder(); он создает новый строитель, который начинается со всех значений этого экземпляра.
Отказ от ответственности: я разработчик ломбок.
Ответ 2
Есть простой способ создать объект Foo, используя существующий объект в качестве шаблона и изменить одно из его свойств? (акцент мой)
Если вы действительно хотите изменить одно свойство, то лучше и эффективнее:
@Wither
class Band {
String name;
String type;
}
Band nirvana = rollingStones.withName("Nirvana");
Увядание не создает мусора, но может изменить только одно поле. Для изменения многих полей вы можете использовать
withA(a).withB(b).withC(c)....
и производят тонны мусора (все промежуточные результаты), но чем toBuilder
более эффективен и более естественен.