我有一个对象的arrayList,每个对象都有一个字符串成员列表。
我试图遍历列表并删除列表中具有null的特定元素(状态)的任何成员。
对象元素在其构造函数中设置为null,如果未填充则保持为null。我无法理解为什么我会获得NPE。我已经调试了它,我可以逐步完成循环并查看每个元素及其成员,但是一旦我点击了某个元素的成员状态"状态"是的,我得到了NPE。
任何帮助表示感谢。
public ArrayList<FlightObject> processResults(ArrayList<FlightObject> list) {
for (int i = 0; i< list.size(); i++) {
if (list.get(i).status.toString() == null) {
list.remove(i);
}
}
return list;
}
答案 0 :(得分:4)
我想NPE问题可以通过像if (list.get(i).status == null)
这样的简单空值检查来解决,但是一旦你纠正了这个问题,你就会遇到另一个问题。更改实际遍历的列表是一个坏主意,因为您可能会错过某些情况,因为您将跳过某些元素(&#34;您更改索引&#34;)。要正确地做到这一点,你需要和像这样的迭代器:
public ArrayList<FlightObject> processResults(ArrayList<FlightObject> list) {
for (Iterator<FlightObject> iter = list.iterator(); iter.hasNext();) {
FlightObject fo = iter.next();
if (fo.status == null) {
iter.remove();
}
}
return list;
}
答案 1 :(得分:3)
当list.get(i).status
为null
时,在其上调用任何方法都会抛出NullPointerException
。
支票应该只是if (list.get(i).status == null) {
答案 2 :(得分:0)
public ArrayList<FlightObject> processResults(ArrayList<FlightObject> list) {
for (int i = 0; i< list.size(); i++) {
if (list.get(i)!=null && list.get(i).status!= null){
list.remove(i);
}
}
}
return list;
}