安装程序:我正在尝试编写一个值对象,所以我认为最好使它成为不可变的。此对象具有BigDecimal
,因此:
public class MyValueObject {
private final BigDecimal bob;
public MyValueObject() {
bob = new BigDecimal(0);
}
}
我还编写了一些方法,包括一个返回新MyValueObject
的add方法。以下是一个例子:
public MyValueObject add(BigDecimal augend) {
return new MyValueObject(this.bob.add(augend);
}
问题是,这是否有效地设置了bob
,还是按预期返回了全新MyValueObject
全新BigDecimal
?
答案 0 :(得分:2)
如果您使用“new”,则表示您正在创建一个新对象。所以它返回一个全新的MyValueObject,它使用“bob”,但不一样。
答案 1 :(得分:1)
我没有Java编辑器,所以请原谅这个例子。有时在这种情况下使用静态“构建器”并使构造函数变为私有是有用的。
public class ValueObject {
private int bob;
private ValueObject(int bob) {
this.bob = bob;
}
public static ValueObject Create(int value){
return new ValueObject(value);
}
public ValueObject Add(int increaseBy) {
return ValueObject.Create(this.bob + increaseBy);
}
}
我意识到我没有回答这个问题。您将创建一个新对象。我的回答是为了让代码中的“创建”更清晰,这将使您更清楚。