不可变对象顾名思义不可改变的对象
一旦构造器完成执行,该实例即无法改变
意味着可以传递对象的引用,不用担心改变其内容,特别是在处理并行时,不可变对象不存在锁的问题,易于构造使用
final class ImmutableClass {
final String str;
final int value;
final int[] ints;
public ImmutableClass(final String str, final int value) {
this.str = str;
this.value = value;
}
public String getStr() {
return str;
}
public int getValue() {
return value;
}
}
1.使用final修饰类
保证类不可继承,保证其不变性
2.使用final修饰类属性
防止外部改变其属性,破坏不变性
3.类中包含类引用时,应使用深拷贝
public ImmutableClass(int[] ints) {
this.ints = ints;
}
当直接通过构造器初始化类内部对象时,可通过外部对象的改变从而破坏类的内部状态,破坏其不变形
public ImmutableClass(int[] ints) {
this.ints = ints.clone();
}
通过深度拷贝,保证状态的不变性