具有可变字段的不可变对象

Immutable objects with Mutable fields

设置:我正在尝试编写一个值对象,因此我认为最好使其不可变。这个对象有一个BigDecimal,所以:

public class MyValueObject {
    private final BigDecimal bob;

    public MyValueObject() {
        bob = new BigDecimal(0);
    }
}

我还写了一些方法,包括一个添加方法,return 新 MyValueObjects。这是一个例子:

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" 更清楚,这会让你更清楚。