我有以下代码:
final int[] a = new int[5];
a[0] = 10;
a[0] = 5;
这段代码完全正常,因为我正在修改对象而不是引用,但现在我想要这样的东西:
int[] a = final new int[5];
因此上面的第3行将触发我正在尝试更改不可变数组的错误。有没有简单的方法呢?集合中有一个函数,但我不想使用任何类型的集合。
答案 0 :(得分:2)
有没有简单的方法呢?
使用普通数组,没有。数组总是可变的,所以如果你想要这个功能,你必须包装一个数组并提供一个读取它的机制(而不是一个用于写入它的机制)。标准JDK类中已经存在可以为您执行此操作的实用程序,如您所述的Collections
中所示。
例如,您可以使用Collections.unmodifiableList
返回的不可修改列表。例如,要创建包含1
,2
和3
的不可修改列表:
List<Integer> a = Collections.unmodifiableList(Arrays.asList(1, 2, 3));
如果没有某种包装(无论是否为标准包装),您所要求的就无法完成。
答案 1 :(得分:1)
如果您声明:
final int[] myarray = new int[5];
它不会像你期望的那样使你的数组不可变。引用myarray
将是最终的,但可以更改此数组的内容。
由于您不想使用Collections Framework,请在您的数组上创建自己的包装类,以防止修改它的内容。它会使你的数组不可变。