有没有办法让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的实例包含其自己的私有数据,并且永远不会更改。