我最近使用 PMD(嵌入 hudson)偶然发现以下警告,我的代码似乎受到了影响可折叠If语句,我并不完全理解。代码看起来像这样
// list to be filled with unique Somethingness
List list = new ArrayList();
// fill list
for (SomeObject obj : getSomeObjects()) { // interating
if (!obj.getSomething().isEmpty()) { // check if "Something" is empty *
if (!list.contains(obj.getSomething())) { // check if "Something" is already in my list **
list.add(obj.getSomething()); // add "Something" to my list
}
}
}
在我看来,这段代码并不是更“可折叠”(否则对于下一个阅读代码的人来说,它会更加难以阅读)。另一方面,我想解决这个警告(不停用 PMD ;)。
一种可能性是排除重复的obj.getSomething()
然后折叠嵌套的if
声明:
for (SomeObject obj : getSomeObjects()) {
Something smth = obj.getSomething();
if (!smth.isEmpty() && !list.contains(smth)) {
list.add(smth);
}
}
在我看来,结果非常可读,并且不应再触发 PMD 警告。
另一种方法是更换List
with a Set
,并避免显式的contains()
全部检查。用一个Set
也会有更好的计算复杂度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)