不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。
不可变类的另外一个好处是它自身是线程安全的,你不需要考虑多线程环境下的线程安全问题。

要创建不可变类,要实现下面几个原则:

  • 将类声明为final,所以它不能被继承
  • 将所有的成员声明为私有的,这样就不允许直接访问这些成员
  • 对变量不要提供setter方法
  • 将所有可变的成员声明为final,这样只能对它们赋值一次
  • 通过构造器初始化所有成员,进行深拷贝(deep copy)
  • 在getter方法中,不要直接返回对象本身,而是克隆对象,并返回对象的拷贝