Java 在一个陌生的地方

Java 在一个陌生的地方,java,nullpointerexception,Java,Nullpointerexception,我不明白这怎么可能引发nullpointer异常。代码如下: 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 nullpoi

我不明白这怎么可能引发nullpointer异常。代码如下:

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是一个简单的返回类型int的this.slotsof。gameServers arraylist中填充了新的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());
        }
    }

GameServer包含空元素。没有其他方法可以在该行上获取NPE。空指针发生在哪一行?@Andrew_CS在code@Keppil这是有道理的,但我想知道它是怎么进去的。我只通过新游戏服务器添加对象。。。永远不要移除任何一个。不可能有任何新的Obj返回空值,是吗?啊,在电话上,是在页面外。在我看来,添加空值检查而不理解它为什么可以为空是不好的做法。它隐藏了实际问题而没有解决它。是的,OP应该找出集合中存在空值的原因,但是在某些应用中,他可能无法访问该信息。还是应该检查一下以确保安全。我强烈反对。为了安全起见,防御性地到处检查空值是一种糟糕的编程实践。一旦找到空值,将由OP从集合中删除,引发异常等。如果在另一端无法防止,我不会允许它崩溃程序。我很想找出根本原因,我想这将是我明天演示的变通方法。明天之后,如果一切顺利,代码无论如何都不会再被查看。
    for (GameServer gs : gameServers) {
        if(gs != null) {
            if (gs.getSlots() > freeSlots) { 
                freeSlots = gs.getSlots();
                chosenOne = gs;
            }
        }
    }