我最近才发现 PMD,并想用它来改进我的代码。因此我启用了所有规则(并得到 47000 次违规 :P)。无论如何,我对此有疑问:
double mean = 0;
for (int p : points)
mean += full[1][p];
mean /= points.size();
在 for each
循环中,PMD 告诉我Local variable 'p' could be declared final。如果我把它改成
double mean = 0;
for (final int p : points)
mean += full[1][p];
mean /= points.size();
它告诉我避免使用 final 局部变量,将它们变成字段。第二次违规对我来说真的没有意义。这样做的“正确”方法是什么? (我意识到可能有不同的方式,我只是想知道 PMD 希望它成为什么样子。)
最佳答案
我认为您在 pmd 的规则中发现了不一致之处,当遵循其中一条规则时您会违反另一条规则。
我认为第一个循环很好:第二个循环也很好,但是使用 final
是相当不正统的。在没有充分理由的情况下添加 final
+ 甚至可能会绊倒非常有经验的开发人员。由于您不想让阅读程序变得比现在更难,我建议跳过 foreach
循环中的 final
。
+ 让循环变量对匿名类可用就是一个很好的理由。
关于java - 每个循环的 PMD 违规(是否最终?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16562280/