前言
有一种对象发布了就是安全的,即不可变对象。
不可变对象需要满足的条件
- 对象创建以后其状态就不可修改
- 对象所有域都是 final 类型
- 对象都是正确创建的(安全发布)
final 关键字
- 修饰类:不能被继承,final 类中的变量可以根据需要设置为 final,final 类中的方法隐式的被设置为 final 方法。
- 修饰方法:不能被继承类修改,一个类的 private 方法会被隐式的指定为 final 方法。
- 修饰变量:
- 基本数据类型变量:初始化之后,值不会改变。
- 引用数据类型变量:初始化之后,不能指向另外的引用。
Collections.unmodifiableXXX
被这个类方法修饰的 Collection、List、Set、Map…为不可变对象。
Guava:InmutableXXX
初始化方法包含的 Collection、List、Set、Map…为不可变对象。