2016-09-06 57 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

另外,让你的课最后禁止继承 –