所以我正在使用集合设计模式并正在使用数组列表。每当我尝试在数组列表中添加内容时,我都会获得一个NPE。我可能错误地实现了集合,因此NPE。
我不想复制我的整个代码,因为它太长了,所以我试图给你所有的SSCCE。我不认为ObjectA.java和Objects.java的内容是必要的,因为在实现集合模式之前我没有得到任何NPE。 特别注意:我无法导入Java的迭代器。
//Game.java
public class Game {
private World w;
public Game() {
w = new World();
w.getList().add(new ObjectA()); //NPE here
}
}
//World.java
public class World {
private Collection list;
public Collection getList() {
return list;
}
}
//Collection.java //I don't know what could cause the NPE so I show everything
public class Collection{
private ArrayList<Objects> collection = new ArrayList<>(0);
public Objects get(int i) {
return collection.get(i);
}
public Objects remove(int i){
return collection.get(i);
}
public int size() {
return collection.size();
}
public void add(Objects o) {
collection.add(o);
}
public Iterator getIterator() {
return new CollectionIterator();
}
public class CollectionIterator {
private int index;
public CollectionIterator() {
index--;
}
public boolean hasNext() {
if (collection.size() <= 0 || currElementIndex == collection.size() - 1) return false;
return true;
}
public Object getNext() {
index++;
return collection.get(index);
}
public void remove() {
collection.remove(index);
index--;
}
}
}
答案 0 :(得分:1)
因为World
类中的列表尚未初始化。
private Collection list; // Not yet initialized
因此,w.getList()
会返回一个未初始化的列表,当您在其上调用add()
时会抛出NPE。
您需要在使用之前初始化列表。
private Collection list = new ArrayList();
答案 1 :(得分:1)
问题是World.list
未初始化。如下所示更改世界级:
public class World {
private final Collection list = new ArrayList();
public Collection getList() {
return list;
}
}
答案 2 :(得分:0)
您已在World
课程中声明但从未初始化您的列表:
private Collection list;
尝试将其替换为:
private Collection list = new Collection();