我在下面的代码中得到一个空指针异常(一个较大程序的一部分 - 在调用“add”的行上抛出异常)。
public class A
{
static ArrayList<Integer> sets[];
public static void main(String[] args)
{
sets = new ArrayList[5];
sets[0].add(1);
}
}
我也不明白为什么编译器要求我将任何类级变量设为静态(例如ArrayList)。据我所知,这些东西不应该在静态上下文中(在编码实践方面,而不是编译器问题),但编译器需要它。
提前致谢。
答案 0 :(得分:3)
sets = new ArrayList[5];
使用null
在进行ArrayList()
调用之前,您需要为每个位置明确设置add()
。
示例:
sets[0] = new ArrayList<Integer>();
sets[0].add(5);
答案 1 :(得分:1)
该行
sets = new ArrayList[5];
分配数组,但不将ArrayList放在数组的任何元素中。
你需要
sets[0] = new ArrayList<Integer>();
sets[0].add(1);
答案 2 :(得分: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);
此外,为了更好的设计,您应该面向接口而不是类。有关详细信息,请参阅What does it mean to "program to an interface"?。
简而言之,您的代码应该看起来像
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));
}
}
}
}