不可变对象
2021-07-27 本文已影响0人
CoderAPang
状态不可变对象需要满足以下要求:
1、类本身使用final修饰:防止子类修改其定义
2、所有字段都用final修饰,保证字段被其他线程可见时已经被初始化
3、创建的过程中,不泄露this关键字给其他类,包括匿名内部类
4、若某个字段引用了其他的状态可变对象,例如数组等,这些字段必须由private修饰,并且值不能对外暴露。若有相关方法要返回这些字段,要做防御性复制(深拷贝)。
状态不可变对象需要满足以下要求:
1、类本身使用final修饰:防止子类修改其定义
2、所有字段都用final修饰,保证字段被其他线程可见时已经被初始化
3、创建的过程中,不泄露this关键字给其他类,包括匿名内部类
4、若某个字段引用了其他的状态可变对象,例如数组等,这些字段必须由private修饰,并且值不能对外暴露。若有相关方法要返回这些字段,要做防御性复制(深拷贝)。