我最近在玩 builder 的 auto-value。我处于这种情况,假设我必须将现有对象转换为具有一些属性的新对象得到更新。示例代码在这里:
@AutoValue
public abstract class SomeObject {
public static Builder builder() {
...
}
public abstract String prop1();
public abstract int prop2();
// Populate a builder using the current instance.
public Builder newBuilder() {
...
}
}
注意我写了一个newBuilder
方法,这样我就可以像这样进行转换:
SomeObject resultedObject = originObject.newBuilder()
.setProp2(99)
.build();
是的,我可以newBuilder
这样写:
public Builder newBuilder() {
return new AutoValue_SomeObject.Builder()
.setProp1(this.prop1())
.setProp2(this.prop2());
}
但是应该有更好的方法,尤其是在处理现实生活中的复杂对象时。这样的事情要好得多:
public Builder newBuilder() {
return new AutoValue_SomeObject.Builder(this);
}
不幸的是,生成的构造函数Builder(SomeObject)
是私有的,我找不到任何对它的引用。
那么你对这个问题有什么看法呢?
AutoValue 版本是1.4-rc2
. 提前致谢。