如何创建不可变(Immutable)的Java类

@wanqiuz 2018-06-03 09:07:10发表于 wanqiuz/blog-articles

创建原则

1)immutable对象的状态在创建之后就不能发生改变,任何对它的改变都应该产生一个新的对象。
2)类应该是final的,以此来限制子类继承父类,以避免子类改变了父类的immutable特性。
3)Immutable类的所有的属性都应该是final的。
4)如果类中包含mutable类对象,那么返回给客户端的时候,返回该对象的一个拷贝,而不是该对象本身。
5)对象必须被正确的创建,比如:对象引用在对象创建过程中不能泄露(leak)。在构造传入参数时不能泄露,在构造过程中不能泄露,根据happens-before原则,final类型字段的赋值happens-before对象引用的赋值。

创建的好处

使用Immutable类的好处:
1)Immutable对象是线程安全的,可以不用被synchronize就在并发环境中共享
2)Immutable对象简化了程序开发,因为它无需使用额外的锁机制就可以在线程间共享
3)Immutable对象提高了程序的性能,因为它减少了锁的使用
4)Immutable对象是可以被重复使用的,你可以将它们缓存起来重复使用,就像字符串字面量和整型数字一样。你可以使用静态工厂方法来提供类似于valueOf()这样的方法,它可以从缓存中返回一个已经存在的Immutable对象,而不是重新创建一个。

参考并感谢: