【发布时间】:2017-06-17 13:54:36
【问题描述】:
我想创建构建器类并按如下方式使用它:
public class SomeBean {
@Inject
private Builder builder;
public void method() {
List<SomeObject> objects = ... ;
for (SomeObject object : objects ) {
if (someConditionSatisfy()) {
builder.withPropertyA(object.getPropertyA);
}
builder.withPropertyB(object.getPropertyB);
builder.withPropertyC(object.getPropertyC);
BuiltObject builtObject = builder.build();
someOutputList.add(builtObject);
}
}
}
但在方法 method() 中我有条件 if 语句:
if (someConditionSatisfy()) {
builder.withPropertyA(object.getPropertyA);
}
让我们假设在循环的第一次迭代中满足条件并且调用了 builder.withPropertyA() 方法。在第二次迭代中,条件不满足。但是第一次迭代已经在builder中设置了属性A,所以builder类的build方法创建的第二个对象也包含这个属性。我想避免这种情况。所以问题是:我该怎么做?创建目标对象后,我是否应该“重置”其 build() 方法中的所有构建器字段?还是我应该每次都创建新的 Builder 实例(但我不知道怎么做,也不使用 new 关键字——我想我应该从容器中获取新的 builder 实例)?
提前感谢您的帮助
【问题讨论】: