
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
虽然很多人听说过不可变对象,但你不一定懂,以及知道怎么创建。
不可变对象:不可变对象(ImmutableObjects)即对象一旦被创建它的状态(对象的数据,也即对象属性值)就不能改变,任何对它的改变都应该产生一个新的对象
如何创建不可变类?
可以遵照以下几点来编写一个不可变类:
A.确保类不能被继承:将类声明为final,或者使用静态工厂并声明构造器为private。。
B.确保对象的属性不能被修改:可以使用private和final修饰符来修饰该类的属性,以确保不被修改。
C.不要提供任何可以修改对象状态的方法。
不过,如果对象的属性是一个可变对象,则需要特别注意,例如对于下面这个:
publicfinalclassImmutableDemo{
privatefinalint[]myArray;
publicImmutableDemo(int[]array){
this.myArray=array;//错了
}
}
虽然属性声明为final了,但是array是一个引用,别人是可以在外部改变这个数组的值的,进而myArray所指向的对象就被改变了。
因为,如果属性是一个可变对象,我们应该采用克隆的方式。如下:
publicfinalclassMyImmutableDemo{
privatefinalint[]myArray;
publicMyImmutableDemo(int[]array){
this.myArray=array.clone();
}
}
不过,最好是采用深度克隆比较好。
说了这么多,相信你也知道这道题的答案了,答是可以包含可变对象的,只是,我们要保证这个对象的状态不能被改变。