Это код:
class A{
prop1, prop2, prop3, prop4, ...
private A(ABuilder b){
this.prop1 = b.prop1;
...
}
A changeProp2(){
//easiest way to return new immutable A?
}
class ABuilder{
withProp1()
withProp2()
withProp3()
...
build()
}
}
A a = new ABuilder().withProp1().withProp2().build();
A newA = a.changeProp2();
У меня есть неизменный объект (A
в данном случае), который построен с использованием Builder ABuilder
. Теперь, когда я хочу новый объект A из существующего сложного объекта A, в моем случае я могу вызвать метод changeProp2()
. Этот метод должен скопировать все внутренние свойства объекта a
, изменить только property2 на новое значение и вернуть новый объект newA
.
Каков наилучший способ сделать это?
Опции, которые я нашел до сих пор:
Внутри changeProp2()
метода, я мог бы скопировать все свойства - но это кажется слишком много, и также не может использоваться повторно, если у меня есть в будущем метод changeProp3()
.
//option1
A changeProp2(){
return new ABuilder().withProp1(this.prop1).withProp2("newProp2")....build();
}
Добавление конструктора копирования в Builder, который запустит Builder со значениями из существующего объекта A, например:
//option2
class ABuilder{
ABuilder(A a){
this.prop1 = a.prop1;
...
}
}
A changeProp2(){
return new ABuilder(this).withProp2("newProp2").build();
}
В этом случае мне кажется более разумным.
Есть ли еще варианты?