Rob*_*Rob 5 java pmd statements
我最近使用PMD(嵌入在哈德森中)发现了以下警告,我的代码似乎遭受了CollapsibleIfStatements,我并不完全理解.代码看起来像这样
// 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这段代码并不是"可折叠的"(否则对于下一个阅读代码的人来说,这将更加难以理解).另一方面,我想要解决此警告(不停用PMD;).
一种可能性是分解重复obj.getSomething()然后折叠嵌套if语句:
for (SomeObject obj : getSomeObjects()) {
Something smth = obj.getSomething();
if (!smth.isEmpty() && !list.contains(smth)) {
list.add(smth);
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,结果非常易读,不应再触发PMD警告.
另一种方法是List用a 替换Set,并contains()完全避免显式检查.使用a Set也会有更好的计算复杂性.
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |