我知道声明一个数组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>
类。
答案 0 :(得分:2)
你是reinventing the wheel。 您可以使用Collections#unmodifiableList(..)获得相同的结果。
Collections.unmodifiableList(Arrays.asList(yourArray));