在Java中实现Immutable类
问题描述:
在我的应用程序中,我需要将我的类设置为不可变的,但在我的类中,我有其他类的对象是可变的,任何人都可以请我建议实现。在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
+1
你应该B'的'一个副本构造函数。现在,您可以在别处保存对“B”对象的引用,并在创建“A”对象后更改对象,从而更改不可变的“A”对象。 – Hoopje
+1
另外,让你的课最后禁止继承 –
制作实例 – vincentzhou
内B私人...和'final' –