Java 在类中使用ArrayList作为静态属性?
有点纠结于某事。我已经建立了一个概念证明,并在谷歌上搜索,但找不到理由Java 在类中使用ArrayList作为静态属性?,java,oop,arraylist,Java,Oop,Arraylist,有点纠结于某事。我已经建立了一个概念证明,并在谷歌上搜索,但找不到理由 我目前正在尝试使用ArrayList作为类中的静态属性来存储一系列条目。唯一的问题是,每次我尝试添加到Totalentries数组列表时,都会得到一个nullPointerError 希望您能给我一些指导,告诉我哪里出了问题 我的班级: import java.util.ArrayList; public class Competition { private static ArrayList totalentries;
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();
}
}
您从未在竞赛类中实例化过
totalentries
您将需要以下内容:
private static ArrayList totalentries = new ArrayList();
但是,请注意,我建议不要保持这种“静态”。否则,您创建的每个“竞争”都将共享相同的条目列表,这可能不是您真正想要的
另外,使用接口声明类型,而不是使用类型实例化。您可能还想在这里使用泛型。因此更好(并且遵循标准命名约定):
private List totalEntries=new ArrayList();
totalentries
未初始化,它指向null
。这样做:
private static List<String> totalentries = new ArrayList<String>();
private static final ArrayList<String> totalentries = new ArrayList<String>();
private static List totalentries=new ArrayList();
使用前必须创建列表,请重试
totalentries=新的ArrayList()
您还应该使用列表代替totalentries变量,以允许将te ArrayList与例如LinkedList进行交换。您永远不会创建
ArrayList
。试试这个:
private static ArrayList totalentries = new ArrayList();
尽管最好使用泛型并获得编译时安全性:
private static ArrayList<String> totalentries = new ArrayList<String>();
private static ArrayList totalentries=new ArrayList();
由于此列表包含属性,因此您不希望替换它,因此,如果您将其定义为:
private static List<String> totalentries = new ArrayList<String>();
private static final ArrayList<String> totalentries = new ArrayList<String>();
private static final ArrayList totalentries=new ArrayList();
实际上,这些都不是好主意,因为您可以同时更改类的多个实例totalentries
。如果这是您的意图,多个竞争
s使用一个静态totalentries
进行存储,那么您最好在单独的类中跟踪该数据
如果您一次只使用一个
竞争
,那么请删除静态
关键字。正如下面许多人所指出的(让我们看看有多少人回答这个问题!)--您永远不会实例化ArrayList。为什么一开始是静态的?这个变量不应该是静态的。它的类型应该是列表。谢谢你清理它。我做了更多的研究,现在更了解这一点!谢谢:)谢谢你的详细帮助!我读了更多,现在明白我的错误了!