有没有办法让Java中的普通数组不可变?

用Google搜索,找到了大量的代码。 但是他们中的任何一个都给了我想要的东西。 我想制作一个普通的数组永恒。 我试过这个:

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class test { public static void main(String[] args) { final Integer array[]; List temp = new ArrayList(); temp.add(Integer.valueOf(0)); temp.add(Integer.valueOf(2)); temp.add(Integer.valueOf(3)); temp.add(Integer.valueOf(4)); List immutable = Collections.unmodifiableList(temp); array = immutable.toArray(new Integer[immutable.size()]); for(int i=0; i<array.length; i++) System.out.println(array[i]); array[0] = 5; for(int i=0; i<array.length; i++) System.out.println(array[i]); } } 

但它不起作用,我可以将5分配给数组[0] …有没有办法使这个数组不可变?

如果要将其用作数组 ,则不能。

你必须为它创建一个包装器,这样就可以在.set()上抛出一个exception,但是没有任何包装可以让你在以下方面抛出exception:

 array[0] = somethingElse; 

当然,元素的不变性完全是另一回事!

注意:抛出不支持的操作的标准exception恰当地命名为UnsupportedOperationException ; 因为它未经检查,所以您不需要在方法的throws子句中声明它。

原始数组是不可能的。

您必须像在代码中一样使用Collections.unmodifiableList()

您还可以使用Guava的ImmutableList ,这是一种高性能,不可变的随机访问List实现,不允许使用null元素。 与Collections.unmodifiableList(java.util.List)不同, Collections.unmodifiableList(java.util.List)是一个可以更改的单独集合的视图,ImmutableList的实例包含其自己的私有数据,并且永远不会更改。