用Google搜索,找到了大量的代码.但是他们中的任何一个都给了我想要的东西.我想制作一个普通的数组Immutable.我试过这个:
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<Integer> temp = new ArrayList<Integer>();
temp.add(Integer.valueOf(0));
temp.add(Integer.valueOf(2));
temp.add(Integer.valueOf(3));
temp.add(Integer.valueOf(4));
List<Integer> 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]);
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我可以将5分配给数组[0] ...有没有办法让这个数组不可变?
如果要将其用作数组,则不能.
你必须为它创建一个包装器,这样你就可以抛出一个异常.set(),但是没有任何包装可以让你抛出异常:
array[0] = somethingElse;
Run Code Online (Sandbox Code Playgroud)
当然,元素的不变性完全是另一回事!
注意:为不支持的操作抛出的标准异常被恰当地命名UnsupportedOperationException; 因为它未经检查,所以您不需要在方法的throws子句中声明它.