java - 每个循环的 PMD 违规(是否最终?)

标签 java foreach final pmd

我最近才发现 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/

相关文章:

javascript - 如何使用 knockout foreach 元素并发布它们?

c# - 为什么 Resharper 推荐使用 foreach 而不是 for Loop?

php - 如何从 MySQL 表中提取多行并自动使用所有行来完成同一件事?

c++ - C++ 中的多重继承观察者模式实现

java - Java中final变量的奇怪行为

java - struts2 jquery ajax从服务器返回数据,如何?

java - 最小化涉及读/写操作的代码

java - 找不到适合模式的正则表达式

java - java代码中循环内的增量问题

java - 添加标签的最终 JPanel (java)