Noo*_*tor 4 java builder lombok dropwizard
所以这是为构建Humans编写的现有代码片段(如matrix电影中:))
if (gender.equals("male")){
return Human.builder()
.gender('male')
.name('abc')
.speaks("english")
.alive(true)
.build();
}else{
return Human.builder()
.gender('female')
.name('abcd')
.speaks("english")
.alive(true)
.build();
}
Run Code Online (Sandbox Code Playgroud)
如果你看一下,这段代码在属性分配中有很多冗余,可以最小化。现在想象一下 10 个类似的条件(这里,只有 2 个!),无论您尝试什么,它最终都会导致看起来很丑的冗余代码。
我尝试在网上搜索大量资源,但找不到任何按照 builder design构建对象的方法。我想在这里实现什么(减少代码冗余)如下所示:
Human human = Human.builder()
.speaks("english")
.alive(true);
if (gender.equals("male")){
human = human // or just human.gender('male').name('abc'); no assignment
.gender('male')
.name('abc');
}else{
human = human // or just human.gender('female').name('abcd'); no assignment
.gender('female')
.name('abcd');
}
return human.build();
Run Code Online (Sandbox Code Playgroud)
这是否可以通过 lombok 或任何人知道在这里构建对象的更好方法?
如果它值得,我在drop-wizard
使用 Lombok 的 Builder:
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class Human {
private String name;
private String gender;
private String speaks;
private boolean alive;
public static void main(String[] args) {
HumanBuilder humanBuilder = Human.builder();
String gender = "female";
humanBuilder
.speaks("english")
.alive(true);
if("male".equals(gender)){
humanBuilder
.gender("male")
.name("abc");
}else{
humanBuilder
.gender("female")
.name("abcd");
}
Human human = humanBuilder.build();
System.out.println(human);
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Human(name=abcd, gender=female, speaks=english, alive=true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3720 次 |
| 最近记录: |