所以我正在使用集合设计模式并使用数组列表。每当我尝试向数组列表中添加某些内容时,我都会收到 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--;
}
}
}
最佳答案
因为World
类中的列表尚未初始化。
private Collection list; // Not yet initialized
因此,w.getList()
返回一个未初始化的列表,当您对其调用 add()
时,该列表会抛出 NPE。
您需要在使用列表之前对其进行初始化。
private Collection list = new ArrayList();
关于Java:如何修复此 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782382/