-2

我在以下代码上遇到空指针异常(较大程序的一部分-在调用“add”的行上引发异常)。

public class A
{
    static ArrayList<Integer> sets[];
    public static void main(String[] args)
    {
         sets = new ArrayList[5];
         sets[0].add(1);
    }
}

我也不明白为什么编译器要求我将任何类级变量设为静态(例如 ArrayList)。据我所知,这些东西不应该在静态上下文中(就编码实践而言,而不是编译器问题),但编译器需要它。

提前致谢。

4

3 回答 3

3
 sets = new ArrayList[5];

只需填满 5 个位置null

您需要在调用ArrayList()之前明确设置每个位置。add()

例子:

sets[0] = new ArrayList<Integer>();
sets[0].add(5);
于 2013-02-07T03:53:03.013 回答
1

线

sets = new ArrayList[5];

分配数组,但不在数组的任何元素中放置 ArrayList。

你需要

sets[0] = new ArrayList<Integer>();
sets[0].add(1);
于 2013-02-07T03:53:07.797 回答
0

这是因为您的数组是用null值初始化的。

//it will initialize sets variable
sets = new ArrayList[5];
//but set[0], set[1]... and on are null

您还应该在使用它们之前初始化数组项

sets[0] = new ArrayList<Integer>();
sets[0].add(1);

此外,为了更好的设计,您应该面向接口而不是类进行编程。请参阅 “编程到接口”是什么意思?了解更多信息。

简而言之,您的代码应如下所示

public class A {
    static List<Integer> sets[];
    public static void main(String[] args) {
        sets = new List[5];
        sets[0] = new ArrayList<Integer>();
        sets[0].add(1);
        //extending your code in order to use more than one value of the List array
        sets[1] = new ArrayList<Integer>();
        sets[1].add(20);
        for(List<Integer> list : sets) {
            if (list != null) {
                System.out.println(list.get(0));
            }
        }
    }
}
于 2013-02-07T03:52:38.793 回答