2016-09-06 92 views
0

在我的應用程序中,我需要將我的類設置爲不可變的,但在我的類中,我有其他類的對象是可變的,任何人都可以請我建議實現。在Java中實現Immutable類

僞代碼:

A,我想作爲不可變類

class A { 
    /* ... */ 

    //class B is mutable 
    B b = new B(); 
    /* ... */ 
} 
+0

製作實例 – vincentzhou

+0

內B私人...和'final' –

回答

2

假設你需要從外界獲得b,您將需要包裝上B中的所有方法,並聲明那些A。 此外,以b作爲構造函數參數,不使用getter/setter方法。

class A{ 
    private final b; 
    A(B b){ 
    this.b = b;  
    } 
    public String getSomeValue(){ 
    return b.getSomeValue(); 
    } 

} 

編輯:參考Hoopje關於在構造函數中克隆b的評論。如果clone或拷貝構造上B不可用,那麼你必須構建你自己的新BA

+1

你應該B'的'一個副本構造函數。現在,您可以在別處保存對「B」對象的引用,並在創建「A」對象後更改對象,從而更改不可變的「A」對象。 – Hoopje

+1

另外,讓你的課最後禁止繼承 –