首先创建不可变类要具备的条件:
1:所有的成员变量都是由final修饰的
2:使用private修饰所有成员变量,可以防止子类及其他地方通过引用直接修改变量值
3:禁止提供修改内部状态的公开方法,比如setXX方法
4:禁止不可变类被外部继承,防止子类改变其定义的方法的行为
5:如果类中存在数组或集合,在提供给外部访问之前需要做防御性复制
public List<Integer> getData(){
return Collections.unmodifiableList(new ArrayList<>(data))
}
第5条所说的防御性复制,在返回data前,新建一个List对象,使用Collections.unmodifiableList方法进行包装,可以保证外部无法修改返回值