我最近和建筑师一起玩自动值。在这种情况下,我说我必须将现有对象转换为具有一些属性的新对象得到更新。示例代码在这里:
@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
。提前致谢。
答案 0 :(得分:7)
答案是在toBuilder
SomeObject
方法
public abstract Builder toBuilder();
生成的子类将实现此方法。