在我的應用程序中,我需要將我的類設置爲不可變的,但在我的類中,我有其他類的對象是可變的,任何人都可以請我建議實現。在Java中實現Immutable類
僞代碼:
類A
,我想作爲不可變類
class A {
/* ... */
//class B is mutable
B b = new B();
/* ... */
}
在我的應用程序中,我需要將我的類設置爲不可變的,但在我的類中,我有其他類的對象是可變的,任何人都可以請我建議實現。在Java中實現Immutable類
僞代碼:
類A
,我想作爲不可變類
class A {
/* ... */
//class B is mutable
B b = new B();
/* ... */
}
假設你需要從外界獲得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
不可用,那麼你必須構建你自己的新B
在A
你應該B'的'一個副本構造函數。現在,您可以在別處保存對「B」對象的引用,並在創建「A」對象後更改對象,從而更改不可變的「A」對象。 – Hoopje
另外,讓你的課最後禁止繼承 –
製作實例 – vincentzhou
內B私人...和'final' –