1

我正在尝试将 2 个子类对象添加到超类对象的静态集合中。但是,当我尝试将对象添加到集合中时,我收到了一个空指针异常,我试图找出原因。

public class MoverLogic{
    static Collection<Super> superCollection;

    public static void main(String[] args) {
    SubAlpha sub1 = new SubAlpha();
    SubBeta sub2 = new SubBeta();
    superCollection.add(sub1); //I'm getting the null pointer exception here
    superCollection.add(sub2);
}
4

4 回答 4

3

当类被构造(或在您的情况下静态加载)时,类的成员被初始化为默认值 - 比如ints 到 0,booleans 到 false 等。类似地,对象被初始化为null.

所以在你的情况下,superCollection被初始化为null,当你使用它时,你会得到一个NullPointerException. 通常认为集合被初始化为空集合对象,但事实并非如此。另外,Collection你是什么意思?ArrayList? LinkedList?

所以像

static Collection<Super> superCollection = new ArrayList<>(); //Java 7

会工作。或与Collection您喜欢的任何其他人一起使用。

于 2013-10-21T17:00:30.590 回答
1

您必须superCollection在使用它之前进行初始化。

于 2013-10-21T16:49:49.917 回答
0

你还没有初始化superCollection。在你有任何东西之前main,写下:

superCollection = new ArrayList<Super>();

如果您不打算更改实际的集合引用,则直接在声明中创建它并添加final修饰符可能会有所帮助:

static final Collection<Super> superCollection = new ArrayList<Super>();

您仍然可以使用addorremove元素,但不能将其重新分配给其他任何东西。

注意:如果它不适合您的需求,您可能会更改ArrayList为不同的具体实施。Collection

于 2013-10-21T16:50:33.893 回答
0

您需要创建您的集合对象,例如。

 static List<Super> superCollection=new LinkedList<Super>();
于 2013-10-21T16:50:37.253 回答