簡體   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