0

我知道声明一个数组final并不能使它不可变。

但是,我可以定义一个像不可变数组一样工作的包装类,例如

public class ImmutableIntArray {
    private int[] array;

    public ImmutableIntArray(int[] array) {
        this.array = (int []) array.clone();
    }

    public int get(int i) {
        return array[i];
    }

    public int length() {
        return array.length;
    }

    public static void main(String[] args) {
        ImmutableIntArray a = new ImmutableIntArray(new int[]{1, 2, 3});

        for (int i = 0; i < a.length(); ++i)
            System.out.println(a.get(i));
    }
}

这种方法对我来说似乎很优雅,但是,它似乎是一种非常明显的方法,我很惊讶我还没有看到其他人应用它。为什么这不应该是某个地方标准库的一部分?我是否对这个定义有任何错误,所以我的类实际上是可变的?

我相信同样的方法适用于任何Object不可变的东西,我什至可以使用泛型来定义它,即一个ImmutableArray<T>类。

4

1 回答 1

3

你在重新发明轮子。您可以使用Collections#unmodifiableList(..)获得相同的结果。

Collections.unmodifiableList(Arrays.asList(yourArray)); 
于 2013-09-14T00:07:46.287 回答