繁体   English   中英

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

[英]Immutable objects with Mutable fields

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

public class MyValueObject {
    private final BigDecimal bob;

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

我还编写了一些方法,包括add方法,这些方法返回新的MyValueObject 这是一个示例:

public MyValueObject add(BigDecimal augend) {
        return new MyValueObject(this.bob.add(augend);
}

问题是,这是否有效地设置了bob还是按预期返回了带有全新BigDecimal全新MyValueObject

如果使用“新”,则说明正在创建一个新对象。 因此,它返回的是一个全新的MyValueObject,它使用了“ bob”,但并不相同。

我周围没有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);
    }
}

我意识到我没有回答这个问题。 您将创建一个新对象。 我的回答是要使代码中的“创建”更加清晰,这对您来说也更加清晰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM