在Java中有两种基本类类型,就是可变类与不可变类。所谓不可变类,是指当创建了这个类实例之后,就不允许修改它的任何属性值。在JDK的基本类库中,所有基本类型的包装类,比如Integer类和Long类,都是不可变类,还有最常见的就是java.lang.String类也是不可变类。
那么创建自己的不可变类时,需要考虑的基本设计模式如下:
(1)把所有属性定义为private final类型。
(2)不对外公开用于修改属性的setXXX()方法。
(3)只需要公开用于读取属性值的getXXX()方法。
(4)在构造方法中初始化类中的所有属性。
(5)覆盖Object类中的equals()和hashCode()方法。在equals()方法中根据对象的属性值来比较两个对象是否相等,并且保证用equals()方法判断为相等的两个对象的hashCode()方法的返回值也相等。
(6)如果需要的话,提供实例缓存和静态工厂方法,允许用户根据特定参数获得与之匹配的实例。
那么创建自己的不可变类时,需要考虑的基本设计模式如下:
(1)把所有属性定义为private final类型。
(2)不对外公开用于修改属性的setXXX()方法。
(3)只需要公开用于读取属性值的getXXX()方法。
(4)在构造方法中初始化类中的所有属性。
(5)覆盖Object类中的equals()和hashCode()方法。在equals()方法中根据对象的属性值来比较两个对象是否相等,并且保证用equals()方法判断为相等的两个对象的hashCode()方法的返回值也相等。
(6)如果需要的话,提供实例缓存和静态工厂方法,允许用户根据特定参数获得与之匹配的实例。