使用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
更有效,更自然。