可以说我有一个类似于lombok的注释类
@Builder
class Band {
String name;
String type;
}
Run Code Online (Sandbox Code Playgroud)
我知道我能做到:
Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以使用现有对象作为模板并更改其中一个属性来创建Foo对象?
就像是:
Band nirvana = Band.builder(rollingStones).name("Nirvana");
Run Code Online (Sandbox Code Playgroud)
我在lombok文档中找不到这个.
Roe*_*ker 141
您可以使用该toBuilder参数为实例提供toBuilder()方法.
@Builder(toBuilder=true)
class Foo {
int x;
...
}
Foo f0 = Foo.builder().build();
Foo f1 = f0.toBuilder().x(42).build();
Run Code Online (Sandbox Code Playgroud)
从文档:
如果使用@Builder生成构建器来生成自己类的实例(除非将@Builder添加到不返回自己类型的方法中,否则总是如此),您可以使用@Builder(toBuilder = true)来生成你的类中的一个实例方法叫做toBuilder(); 它会创建一个以该实例的所有值开头的新构建器.
免责声明:我是一名lombok开发者.
maa*_*nus 28
有没有一种简单的方法可以使用现有对象作为模板并更改其中一个属性来创建Foo对象?(强调我的)
如果你真的想要改变一个属性,那么有一个更好,更有效的方法:
@Wither
class Band {
String name;
String type;
}
Band nirvana = rollingStones.withName("Nirvana");
Run Code Online (Sandbox Code Playgroud)
枯萎不会产生垃圾,但它只能改变一个字段.要更改许多字段,您可以使用
withA(a).withB(b).withC(c)....
Run Code Online (Sandbox Code Playgroud)
并产生大量的垃圾(所有中间结果),但toBuilder更有效,更自然.
| 归档时间: |
|
| 查看次数: |
29751 次 |
| 最近记录: |