在Java中定义自己的不可变数组

时间:2013-09-13 23:53:35

标签: java arrays immutability

我知道声明一个数组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>类。

1 个答案:

答案 0 :(得分:2)

你是reinventing the wheel。 您可以使用Collections#unmodifiableList(..)获得相同的结果。

Collections.unmodifiableList(Arrays.asList(yourArray));