我有这个功能:
final ArrayList<Addressable> tempStoreList = new ArrayList<>();
tempStoreList.addAll(addressables);
Collections.sort(tempStoreList, new Comparator<Addressable>() {
@Override
public int compare(Addressable o1, Addressable o2) {
double distanceToO1 = 0;
double distanceToO2 = 0;
if (o1.getAddress() == null) {
return (o2.getAddress() == null) ? 0 : -1;
}
if (o2.getAddress() == null) {
return 0;
}
if (userLocation != null && o1.getAddress() != null && o2.getAddress() != null) {
distanceToO1 = GlobalUtilities.distance(userLocation, o1.getAddress().getLocation(), "K");
distanceToO2 = GlobalUtilities.distance(userLocation, o2.getAddress().getLocation(), "K");
}
if (distanceToO1 < distanceToO2) {
return -1;
} else if (distanceToO1 > distanceToO2) {
return 1;
} else {
return 0;
}
}
});
出于某种原因,我一直在接受NPE:
if (o2.getAddress() == null) {
return 0;
}
对我而言意味着null以某种方式放置在数组中。以前有人见过这个吗?
答案 0 :(得分:1)
这意味着您需要检查o2参考。它可能是null。在从o2.getAddress获取地址之前,先检查o2 == null
答案 1 :(得分:1)
是的,您可以在数组列表中包含null元素。
试试这个:
final ArrayList<Object> list = new ArrayList<Object>();
list.add(null);
因此,如果您无法保证始终拥有有效对象,请将代码更改为
if (o2 == null || o2.getAddress() == null) {
return 0;
}