不可变类最小化
现状:没注意过,对不变类理解不深
原因:不知道为什么要把一个类定义为不可变的
不可变类,好处:
1.线程安全,类的所有属性都可以在多个线程共享,不用同步
2.可以缓存不可变类
3.加快jvm速度
String就是一个典型的不可变类。
设计不可变类的原则:
1.设计为final,个人理解final和不可变类没有必然的联系,这里申明为final,主要是怕在继承的时候破话语义,比如StringChild继承String,StringChild完全可以设计为可变的,下次String str = new StringChild("abc"),还认为str指向的string是不可变的,不就产生歧义了么。
2.私有变量,final。对于final int a,其实可以设计为public,但是若以后要a的类型,改为引用一个对象,那么就只能private了,因为对象内的属性是有可能修改的,所以都申明为private.
3.深度复制,不管创建对象还是输出对象属性
4.不提该修改属性的方法。
原文:http://www.cnblogs.com/jsy306/p/4947668.html