使用lombok从现有对象构建对象

可以说我有一个类似于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"); 

我在lombok文档中找不到这个。

您可以使用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(); 它会创建一个以该实例的所有值开头的新构建器。

免责声明:我是一名lombok开发者。

有没有一种简单的方法来创建Foo的对象,使用现有对象作为模板并更改其中一个属性? ( 强调我的

如果你真的想要改变一个属性,那么有一个更好,更有效的方法:

 @Wither class Band { String name; String type; } Band nirvana = rollingStones.withName("Nirvana"); 

枯萎不会产生垃圾,但它只能改变一个字段。 要更改许多字段,您可以使用

 withA(a).withB(b).withC(c).... 

并产生大量的垃圾(所有中间结果),但比toBuilder更有效,更自然。