如何修复PMD警告:UseCollectionIsEmpty?

问题描述:

我得到一个PMD警告 - UseCollectionIsEmpty,它会给出确切的消息是:如何修复PMD警告:UseCollectionIsEmpty?

“替代调用大小()== 0(或大小()= 0,大小()> 0,大小(! )< 1)在最后的else if声明中调用isEmpty()“。

我的问题是,我的声明是检查如果我的ArrayList不是空的。但是,PMD警告告诉我将其更改为isEmpty(),这不是我需要做的。有什么解决这个问题的工作?

 if (theNeighbors.get(getDirection()) == Terrain.CROSSWALK) { 
      myDirection = getDirection(); 
     } else if (theNeighbors.get(getDirection().left()) == Terrain.CROSSWALK) { 
      myDirection = getDirection().left(); 
     } else if (theNeighbors.get(getDirection().right()) == Terrain.CROSSWALK) { 
      myDirection = getDirection().right(); 
     } else if (myPossDir.size() > 0) { 
      myDirection = myPossDir.get(random.nextInt(myPossDir.size())); 
     } else { 
      myDirection = getDirection().reverse(); 
     } 
+0

你误读了。它是在讨论'size()'的一般用法。在你的情况下,否定'isEmpty'。 – Savior

+0

@PiIlar如果否定'isEmpty',你的意思是做'else if(!myPossDir.isEmpty())',我得到一个新的PMD警告“避免if(x!= y)..; else ..; “如果我这样做。 – Jasmine

+1

哦,是的。只需重新排列它们。在“if”中做正面的事情,在其他事件中做负面的事情。 – Savior

而不是

} else if (myPossDir.size() > 0) { 
     myDirection = myPossDir.get(random.nextInt(myPossDir.size())); 
    } else { 
     myDirection = getDirection().reverse(); 
    } 

你应该使用:

} else if (myPossDir.isEmpty()) { 
     myDirection = getDirection().reverse(); 
    } else { 
     myDirection = myPossDir.get(random.nextInt(myPossDir.size())); 
    } 

这将使上述PMD警告消失,并且它更清楚地表达你的意图,你要检查该集合不是空的。使用size()适用于其他情况 - 当您不将它与零比较时。

编辑:IFS的改变顺序,那么你现在使用isEmpty(),而不是!isEmpty()(另一PMD警告,并否定if s为不容易读不否定的)