我遇到了一个特殊情况,我无法解决PMD中的DD异常。假设代码是:
BigDecimal amount = BigDecimal.ZERO;
for(int i=0;i<5;i++)
{
amount = amount.add(i);
}
return amount;
通过PMD运行此代码时,它会在声明金额时显示DD异常。但是,如果我删除初始化,我将得到一个异常。这种情况如何通过PMD。任何人吗?
答案 0 :(得分:10)
从"controversial rules"页面,DataflowAnomalyAnalysis部分:
DD - 异常:重新定义了最近定义的变量。这是不祥的,但不一定是个错误。
在这种情况下,它绝对不是一个错误。我建议您抑制或忽略此特定情况的警告。 (在计算下一个值时使用原始值的事实表明,规则可能写得更好,说实话。)
了解规则的原因并挑选和遵守您遵守的规则以及在哪里,这一点非常重要。例如,我强烈不同意“只有一个退出点”规则 - 有很多时候,有一个以上的退出点使得一个方法更容易阅读。有选择性,如果规则通常正常,但您已经在这个特定情况下验证了您的代码是正常的,suppress the warning就在那个地方。