我知道声明一个数组final
并不能使它不可变。
但是,我可以定义一个像不可变数组一样工作的包装类,例如
public class ImmutableIntArray {
private int[] array;
public ImmutableIntArray(int[] array) {
this.array = (int []) array.clone();
}
public int get(int i) {
return array[i];
}
public int length() {
return array.length;
}
public static void main(String[] args) {
ImmutableIntArray a = new ImmutableIntArray(new int[]{1, 2, 3});
for (int i = 0; i < a.length(); ++i)
System.out.println(a.get(i));
}
}
这种方法对我来说似乎很优雅,但是,它似乎是一种非常明显的方法,我很惊讶我还没有看到其他人应用它。为什么这不应该是某个地方标准库的一部分?我是否对这个定义有任何错误,所以我的类实际上是可变的?
我相信同样的方法适用于任何Object
不可变的东西,我什至可以使用泛型来定义它,即一个ImmutableArray<T>
类。