第十五条:使可变性最小化

不可变类只是其实例不能被修改的类。每个实例所包含的信息必须在创建该实例的时候就提供,并在对象的整个生命周期内固定不变。

JDK中已经包含了许多不可变的类,其中有String,基本类型包装类,BigInteger,和BigDecimal。

存在不可变的类的类有许多理由:不可变的类比可变类更加易于设计,实现和使用。它们不容易出错,且更加安全。

为了使类成为不可变的,需要遵循下面五条规则:

1.不要提供任何会修改对象状态的方法

2.保证类不会被扩展。为了防止子类化,一般的做法是使这个类成为final的。

3.使所有的域都是final的

4.使所有的域都是私有的

5.确保对于任何可变组件的互斥访问。如果这个类具有指向可变对象的域,要确保该类的客户端无法获得这些可变域的引用。

不可变对象 比较简单,不可变对象只有一种状态,即被创建时的状态。

不可变对象本质上是线程安全的,它们不要求同步。

不可变对象真正的缺点是:对于每个不同的值,都需要一个单独的对象。如果你执行一个多步骤的操作,并且每个步骤都会产生一个新

的对象,除了最后的结果之外其他的对象最终都会被丢弃。一般这种不可变类,有一个公有的可变配套类。JDK中有这样的例子:String类

是不可变类,它的可变配套类是StringBuilder类。

原文地址:https://www.cnblogs.com/wangliyue/p/4460741.html