我不明白这怎么可能抛出空指针异常。代码如下:
if (gameServers.isEmpty()) {
return false;
}
int freeSlots = Integer.MIN_VALUE;
GameServer chosenOne = null;
for (GameServer gs : gameServers) {
if (gs.getSlots() > freeSlots) { // THIS LINE throws the nullpointer exception
freeSlots = gs.getSlots();
chosenOne = gs;
}
}
其中gs.getSlots()
是一个简单的return this.slots
(int类型)。gameServers的数组列表是由new GameServer(..., ..., slots)
对象填充的,这些对象也不能返回null。
有谁能告诉我从哪里开始找吗?
您需要检查for循环中gs是否为null,例如
if(gs != null && <insert original if statement>){
....
虽然您的集合不是空的,但它可能有一个null元素。
例如 List<String> myList = new ArrayList<String>();
myList.add(null);
if(!myList.isEmpty()) {
for(String str : myList){
System.out.println(str.length());
}
}
将抛出NPE。为了避免这种情况,您可以使用一个简单的null检查。
for (GameServer gs : gameServers) {
if(gs != null) {
if (gs.getSlots() > freeSlots) {
freeSlots = gs.getSlots();
chosenOne = gs;
}
}
}