Java不可变类怀疑

时间:2011-05-05 08:18:52

标签: java

我正在编写一个不可变的类。其中一个实例是另一个可变的类的对象。如何防止修改该实例的状态。

2 个答案:

答案 0 :(得分:5)

如果您为所有getter提供代理,但不为该字段本身提供getter。例如:

public final class Foo {
   private Bar bar;

   public String getBarField1() { 
       return bar.getBarField1();
   }
   public String getBarField2() {
       return bar.getBarField2();
   }
}

但是有一件事要考虑 - 这个领域是如何创造的。如果它是在构造函数中传递的,那么你必须创建它的副本而不是获取传递的对象,否则创建代码将引用Bar实例并能够修改它。

答案 1 :(得分:3)

  1. 将变量设为私有
  2. 仅允许通过getter访问变量字段(getVarNameProperty1()getVarNameProperty2());
  3. 让类最终为了拒绝继承。在子类中,可以创建一个公共getter。