2

说,我有一个类,其中包含一个整数数组。

Integer[] numbers;

另外,我有一些简单的构造函数来初始化我的数组:

public Program()
{
    numbers = new Integer[11];
    numbers[0] = null;
}

如您所见,我有一个11元素数组。

关键是我永远不会用 index 改变第一个0

有没有办法完成我的数组的第一个元素,所以它不能改变?

就像final变量一样。

4

6 回答 6

4

不,你不能用数组来做到这一点。事实上,无法将数组元素设为只读是在可以从外部修改数据的情况下使用数组的一个主要缺点。

保护数组元素的唯一方法是将数组封装在一个类中,该类将在执行修改之前检查元素和索引:

public class ArrayWithFixedFirst {
    private final Integer[] numbers = new Integer[11];
    public Integer get(int index) {
        return numbers[index];
    }
    public void set(int index, Integer value) {
        if (index == 0) throw new IllegalArgumentException();
        numbers[index] = value;
    }
}
于 2013-02-14T21:21:04.117 回答
2

我不相信有一种方法可以指定不能重新分配数组的第一个元素。

我认为你最好的选择是为数组创建一个包装类,然后忽略任何重新分配第一个元素的尝试。

于 2013-02-14T21:22:03.643 回答
1

通过封装,您可以允许/禁止数组修改。

public void updateArray(int position,int value){

if(position > 0 && position < numbers.length){

    numbers[position] = value;

    }
}
于 2013-02-14T21:25:46.457 回答
0

您不能强制数组不可​​修改。另一种方法是使用Collections.unmodifiableList. 但是整个列表因此将是不可修改的。

于 2013-02-14T21:21:57.297 回答
0

有趣的问题,但我不得不说不。Java 数组不允许您只完成一个元素。您可以通过编写自定义包装器来获得相同的功能,但这引出了一个问题,为什么?我不知道您要使用什么应用程序,但我建议包装一个十元素数组并将您的索引减一,并为第零个索引返回 null

于 2013-02-14T21:22:59.360 回答
0

我不知道你为什么要这样做,但是像这样:

class NoFirstArray extends ArrayList {
    public NoFirstArray(int size,Object initialValue) {
       super(size);
       super.set(0,initialValue);
    }
    public void set(Integer i, Object value) {
        if(i == 0) throw RuntimeException();
        super.set(i,value);
    }
    public void remove(int i) {
        if(i == 0) throw RuntimeException();
        super.remove(i);
    }
}
于 2013-02-14T21:23:11.667 回答