有点挣扎。我已经建立了一个概念证明和谷歌搜索,但找不到理由。
我会欣赏一些关于我哪里出错的指导意见吗?
我的班级:
import java.util.ArrayList;
public class Competition {
private static ArrayList totalentries;
public Competition(){
}
public void newEntry(){
totalentries.add("an Entry");
}
}
我的测试代码:
public class testEntries {
/**
* @param args
*/
public static void main(String[] args) {
Competition myComp=new Competition();
myComp.newEntry(); //Null Pointer comes here!
myComp.newEntry();
myComp.newEntry();
myComp.newEntry();
myComp.newEntry();
myComp.newEntry();
myComp.toString();
}
}
答案 0 :(得分:1)
您从未在竞赛班中实例化totalentries
。
您需要以下内容:
private static ArrayList totalentries = new ArrayList();
但请注意,我建议不要保持这种“静态”。否则,您创建的每个“竞赛”都将共享相同的条目列表,这可能不是您真正想要的。
此外,使用接口声明您的类型,而不是使用类型实例化。您可能还想在此处使用泛型。所以更好(并遵循标准命名约定):
private List<String> totalEntries = new ArrayList<String>();
答案 1 :(得分:1)
你永远不会成为ArrayList
。试试这个:
private static ArrayList totalentries = new ArrayList();
尽管使用泛型并获得编译时安全性会更好:
private static ArrayList<String> totalentries = new ArrayList<String>();
由于此列表包含属性,因此您不希望它被替换,因此如果您按照这样定义它会更好:
private static final ArrayList<String> totalentries = new ArrayList<String>();
但实际上,这些都不是好主意,因为您可能会同时更改totalentries
类的多个实例。如果这是您的意图,那么多个Competition
使用一个静态totalentries
进行存储,那么您最好在单独的类中跟踪这些数据。
如果您一次只使用一个Competition
,请删除static
关键字。
答案 2 :(得分:0)
totalentries
未初始化,并指向null
。像这样:
private static List<String> totalentries = new ArrayList<String>();
答案 3 :(得分:0)
必须在使用前创建列表,尝试 totalentries = new ArrayList();
您还应该使用List代替totalentries变量,而不是允许使用例如LinkedList交换te ArrayList。