Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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_Code Analysis_Static Analysis_Pmd - Fatal编程技术网

Java 如何修复以下PMD冲突

Java 如何修复以下PMD冲突,java,code-analysis,static-analysis,pmd,Java,Code Analysis,Static Analysis,Pmd,我使用PMD分析代码,它会产生一些高优先级的警告,我不知道如何修复这些警告 1) 如果(x!=y)。。;否则

我使用PMD分析代码,它会产生一些高优先级的警告,我不知道如何修复这些警告

1)
如果(x!=y)。。;否则x=y
?我如何重构它

2)
使用显式作用域而不是默认的包私有级别。
但是该类实际上只在包内使用。我应该使用什么访问修饰符


3)
参数未赋值,可以声明为final。
我是否应该将final关键字添加到PMD用此警告指出的所有位置?

这些似乎都是可以关闭的次要警告

1) 它想让你改变逻辑

if(x==y) {
    //old else clause
} else {
    //old if clause
}
2) 如果包确实是您想要的正确访问,则没有要添加的访问修饰符。我不太熟悉,不知道是否有办法压制这种特定的警告

3) 风格问题。有些人希望一切都能最终确定。另一些人则认为,这会给几乎没有的信息增加太多的混乱。如果你属于后一个阵营,请关闭该警告。

关于第一项(不平等),有两个问题:

1) 双重否定的可读性

假设你有:

if(x!=y) { false clause } else { true clause }
如果“非x不等于y”,则执行第二条

这可以改写为:

if (x==y) {true clause } else {false clause}.
2) 正确性:如果x和y不是基元,则使用
if(!x.equals(y))
更安全。
这相当于使用==而不是.equals(),可能会导致非常严重的错误。

您不需要启用所有规则。选择一些您同意的规则并重构代码,直到清除所有警告

1-如果(x==y),则将其重构为
。。。否则…
逻辑。只要在if语句中避免负面条件,它们会使代码更难理解

2-我不会启用该规则


3-很多人声明了很多字段和变量。尤其是当他们想要确保或表示在方法中变量的值不应改变时。如果你不喜欢,请禁用该规则。

避免否定:如果(x!=y)doThis()或doThat()
,请先检查积极的情况,因为人们更喜欢积极的事情而不是消极的事情。阅读源代码时,必须颠倒头脑中的逻辑,这会使大脑产生扭曲。因此,写下:

 if ( x!=y ) doThis() else doThat()       // Bad - negation first
 if ( x==y ) doThat() else doThis()       // Good - positive first
明确的范围界定:根据,这是一个有争议的规则。你可能讨厌它,其他人喜欢它。您应该做的是将类中的所有字段设置为私有。似乎有一个字段或方法(不是类)具有包可见性,例如:

 class Foo {
   /* private missing */ Object bar;
 }

最终参数:方法参数应为最终参数,以避免意外重新分配。这只是一个很好的做法。如果您使用的是Eclipse,那么content assist甚至提供了一个名为“在可能的情况下将修改器更改为final”的快速修复程序。只需在编辑器中用Ctrl-a选择所有代码,然后按Ctrl-1。

您也可以在不希望检查PMD规则的任何行的末尾使用
//NOPMD

例如,对于上述给定代码,您可以通过以下方式抑制PMD检查:

class Foo {
   /* private missing */ Object bar; // NOPMD
 }
请注意,上述注释可能会隐藏同一行中的其他警告