Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每个循环的PMD违规开启(是否最终?)_Java_Foreach_Final_Pmd - Fatal编程技术网

Java 每个循环的PMD违规开启(是否最终?)

Java 每个循环的PMD违规开启(是否最终?),java,foreach,final,pmd,Java,Foreach,Final,Pmd,我最近刚刚发现了PMD,并想用它改进我的代码。因此,我启用了所有规则(并得到47000个违规:P)。不管怎样,我对这个有一个问题: double mean = 0; for (int p : points) mean += full[1][p]; mean /= points.size(); 在每个循环的上,PMD告诉我可以将局部变量“p”声明为final。如果我把它改成 double mean = 0; for (final int p : points) mean += full[

我最近刚刚发现了PMD,并想用它改进我的代码。因此,我启用了所有规则(并得到47000个违规:P)。不管怎样,我对这个有一个问题:

double mean = 0;
for (int p : points)
  mean += full[1][p];
mean /= points.size();
在每个循环的
上,PMD告诉我可以将局部变量“p”声明为final。如果我把它改成

double mean = 0;
for (final int p : points)
  mean += full[1][p];
mean /= points.size();

它告诉我要避免使用最终的局部变量,将它们转换为字段。第二次违规对我来说毫无意义。“正确”的方法是什么?(我意识到可能有不同的方式,我只想知道PMD希望它是怎样的。)

我认为您发现PMD的规则不一致,当遵循其中一条规则会导致您违反另一条规则时


我认为第一个循环也很好:第二个循环也很好,但是使用
final
是非常不正常的。在那里添加一个
final
而没有好的理由+可能会让非常有经验的开发人员绊倒。由于您不想让阅读程序变得更加困难,我建议跳过
foreach
循环中的
final



+使循环变量可用于匿名类就是一个很好的理由。

将final关键字保留在for循环中。这将防止人们重新分配循环变量

要解决“避免使用最终局部变量,将它们转换为字段”的问题,请打开

double-vStd=0,假定尚未重新分配其值,则可以将其声明为类常量

此外,请在各自的行中声明每个变量:

double vStd = 0;
double mean = 0;

对我来说,这看起来像pmd规则中的一个bug。只是出于好奇-您如何增加(或更改)循环中的最后一个计数器?;)我正在使用PMD eclipse插件(
PMD插件4.0.0.v20130510-1000
)。@brimborium-啊,好的,快速搜索一下,解释一下,为什么它会工作;)我认为第一个循环可以正常工作:第二个循环可以正常工作,但是使用
final
是非常非正统的,甚至可能会绊倒有经验的开发人员(查看上面评论中的对话,了解一个好的示例)。您不想让读取程序变得更困难,因此,除非出于其他目的(例如使变量可用于匿名类)必须在那里有一个
final
,否则我建议跳过
final
。我得到了避免使用final局部变量的建议,请将它们转换为
上的字段(最终积分p:分)
而不是在
vStd
上。所以这不起作用。如果我删除
final
分类器,PMD会返回到局部变量“p”可以声明为final。谢谢你每行声明一条注释,我通常遵循这条规则。在这种情况下,我只想保持代码紧凑。我从中删除了
vStd
这是一个奇怪的例子,我的IDE上没有你的代码的标志。我已启用该规则。我使用eclipse Indigo SR2和eclipse pmd插件v0.8.0.201401251911,它使用pmd 5.0.5.Ah,所以它可能得到了修复。我的帖子已经快一年了。。。我再也没有这种设置了。