可变性混乱

时间:2015-01-11 13:30:42

标签: java

我的老师向我们展示了以下class

public class Student{
   private int id;

   public Student(int ssn) {
     id = ssn;
   }

   public int getId() {
     return id;
   }
}

在幻灯片中,我的老师说这class 可变。但是,我不明白为什么。

有人可以解释这个class是如何变异的吗?或者我的老师错了?

1 个答案:

答案 0 :(得分:0)

Effective Java中所述,使类不可变的最常用技术要求类必须:

  1. 不提供任何可以更改方法状态的方法:避免在实例化后更改对象的状态。
  2. 确保无法扩展类:如果类是由另一个本质上可变的类扩展的,则在多态上下文中使用父类(在您的情况下为Student类)的类不能依赖它是不可改变的。
  3. 将所有字段设为最终字段:确保分配给字段的值在初始化后无法更改。
  4. 将所有字段设为私有:防止用户类直接访问字段,从而防止直接修改。
  5. 确保对任何可变组件的独占访问:确保该类的客户端不保留对该类字段引用的可变对象的引用。
  6. 这里,类Student可以被其他类扩展,而 id 字段不是最终的,与上述第2点和第3点相比。因此,Student类在真正意义上不是不可变的。