我正在使用IntelliJ PMD插件,它在if(keys[i].equals(key))
上违反了LOD。键是函数中同一类中的对象。
public Object get(Object key) {
int n,i;
for(i=0,n=0;i<keys.length;i++) {
if(n >= nelems)
break ;
if ( keys[i] == null )
continue;
if(keys[i].equals(key))
return values[i] ;
n++ ;
}
return null;
}
您可以在此处找到完整的代码:https://raw.githubusercontent.com/Sable/abc/master/benchmarks/Jigsaw/src/classes/org/w3c/util/ArrayDictionary.java
答案 0 :(得分:0)
如果您不希望将其标记为错误,则可以将索引字段键[i]包装为新的String(keys [i])并在此新对象上调用equals函数。这种丑陋的骇客将破坏规则。
但是,我认为,更好的解决方案是从此规则中过滤诸如String,Integer,Long等基类。其次,不可变类也应免除此规则。注释@Immutable可用于实现此目的。这将必须由PMD团队实施。
另一个选择是通过类边界而不是对象边界来定义规则。如果方法返回相同类或原始类的对象,则不计入该对象。如果是原始类型,则必须不受该规则的应用。
这种方法链条的规则变得很累人。