完成数组的第一个元素

时间:2013-02-14 21:17:28

标签: java arrays final finalize

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

Integer[] numbers;

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

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

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

重点是我永远不会改变索引为0的第一个。

有没有办法完成我的数组的第一个元素,所以无法更改?

final变量一样。

6 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

public void updateArray(int position,int value){

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

    numbers[position] = value;

    }
}

答案 3 :(得分:0)

您不能强制数组不可​​修改。另一种方法是使用Collections.unmodifiableList。但是整个清单都是不可修改的。

答案 4 :(得分:0)

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

答案 5 :(得分: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);
    }
}