Как скопировать / преобразовать объект AutoValue с помощью компоновщика
Я недавно играю в авто-стоимость со строителем. И я нахожусь в такой ситуации, скажем, мне нужно преобразовать существующий объект в новый, обновив несколько свойств. Пример кода здесь:
@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
, Заранее спасибо.
1 ответ
Пожалуйста, обратитесь к ответу Джейк Уортон
Ответ должен объявить toBuilder
метод в SomeObject
public abstract Builder toBuilder();
сгенерированный подкласс будет реализовывать этот метод.