具有可变字段的不可变对象
Immutable objects with Mutable fields
设置:我正在尝试编写一个值对象,因此我认为最好使其不可变。这个对象有一个BigDecimal
,所以:
public class MyValueObject {
private final BigDecimal bob;
public MyValueObject() {
bob = new BigDecimal(0);
}
}
我还写了一些方法,包括一个添加方法,return 新 MyValueObject
s。这是一个例子:
public MyValueObject add(BigDecimal augend) {
return new MyValueObject(this.bob.add(augend);
}
问题是,这是否有效地设置了 bob
,还是如预期的那样 return 使用全新的 BigDecimal
和全新的 MyValueObject
?
如果您使用 "new",您将创建一个新对象。所以它返回一个全新的 MyValueObject,它利用 "bob",但不一样。
我周围没有 Java 编辑器,所以请原谅这个例子。有时在这种情况下使用静态 "builder" 并将构造函数设为私有是很有用的。
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);
}
}
我发现我没有回答问题。您将创建一个新对象。我的回答是为了让代码中的 "creating" 更清楚,这会让你更清楚。
设置:我正在尝试编写一个值对象,因此我认为最好使其不可变。这个对象有一个BigDecimal
,所以:
public class MyValueObject {
private final BigDecimal bob;
public MyValueObject() {
bob = new BigDecimal(0);
}
}
我还写了一些方法,包括一个添加方法,return 新 MyValueObject
s。这是一个例子:
public MyValueObject add(BigDecimal augend) {
return new MyValueObject(this.bob.add(augend);
}
问题是,这是否有效地设置了 bob
,还是如预期的那样 return 使用全新的 BigDecimal
和全新的 MyValueObject
?
如果您使用 "new",您将创建一个新对象。所以它返回一个全新的 MyValueObject,它利用 "bob",但不一样。
我周围没有 Java 编辑器,所以请原谅这个例子。有时在这种情况下使用静态 "builder" 并将构造函数设为私有是很有用的。
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);
}
}
我发现我没有回答问题。您将创建一个新对象。我的回答是为了让代码中的 "creating" 更清楚,这会让你更清楚。