下面的类是不可变类吗?
class A {
private int[] values;
public int[] getValues() {
return values;
}
}
你加一个set方法
public void setValues(int[] values){
this.values = values;
}
调用这个set方法就能改变values的值了。
如何设计不可变类?
(1)类声明为final,不可以被继承。
(2)所有成员变量定义为私有和final(private final)。
(3)不提供改变成员变量的方法。
(4)通过构造器初始化成员,若构造器传入引用数据类型需要进行深拷贝。
你这属于第3种,没提供改变成员变量方法
class A {
private int[] values;
public A(int[] s) {
values = s;
}
public int[] getValues() {
return values;
}
}
不过发现建一个如上的构造函数是可以通过返回的数组的引用来改变values
问题里面的应该是不可变类,没有初始化那个数组