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

yak*_*yak 9 java arrays

用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] ...有没有办法让这个数组不可变?

fge*_*fge 5

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

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

array[0] = somethingElse;
Run Code Online (Sandbox Code Playgroud)

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

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