来自 PMD 的 DD/DU 警告 [重复]

Posted

技术标签:

【中文标题】来自 PMD 的 DD/DU 警告 [重复]【英文标题】:DD/DU warnings from PMD [duplicate] 【发布时间】:2013-01-01 23:56:14 【问题描述】:

可能重复:What is the reason for these PMD rules?

为什么我会收到 DD/DU 警告?

这是我的代码:

// DD warning from PMD
public Object foo() 
  Object result = null;
  if (condition) 
    // code block, no accec to result
    result = newResult;
  
  return result;

// DU warning from PMD
List<Object> data = new ArrayList<Object>(anotherList);
anotherList.remove(1);
// some other modification of anotherList
if (condition) 
  // some code. no access to data
  for (Object o : data) 
    // loop for original content of the list
  

这里有什么问题吗?或者它是一个PMD错误?我可以忽略这些警告吗?

【问题讨论】:

【参考方案1】:

您的 DD 异常确实可以写得更好,出现错误的机会更少:

return condition? newResult : null;

或者,如果你对语法比较保守,

if (condition)
  return newResult;
return null;

在第二个示例中,您将无条件地创建 data,但只能有条件地使用它。重写为

if (condition) 
  List<Object> data = new ArrayList<>(anotherList);
  // or maybe just use anotherList without copying
  ...

else 
  anotherList.remove(1);
  // some other modifications of anotherList

【讨论】:

无法实现 DD 异常的第一个提案,因为 newResult 是在块中计算的。第二 - 引发另一个 PMD 规则破坏(从方法中多次退出)。 DU 提案导致代码重复。 我相信你的话;这不是你问题的一部分。无论如何,这回答了您的问题:这不是 PMD 的错误。

以上是关于来自 PMD 的 DD/DU 警告 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

非瞬态类成员的 Java PMD 警告

PMD教程

如何修复来自 PHP 中 date() 的警告" [重复]

有没有办法忽略单个 FindBugs 警告?

来自链接器的奇怪警告(ld)[重复]

Javascript增量(++)警告[重复]