java - 如何解决以下 PMD 违规问题

标签 java code-analysis static-analysis pmd

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

1) 避免 if(x!=y)..; else...; 但是需要这个逻辑怎么办呢?也就是说,我确实需要检查是否 x!=y?我该如何重构它?

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

3) 参数没有赋值,可以声明为final。我是否应该在PMD 指出的所有地方添加final 关键字?

最佳答案

避免否定:代替 if( x!=y ) doThis() else doThat(),首先检查正例,因为人/人类倾向于喜欢积极的东西胜过消极的东西。读源码的时候脑子里要颠倒逻辑,真是绞尽脑汁。因此,改为:

 if ( x!=y ) doThis() else doThat()       // Bad - negation first
 if ( x==y ) doThat() else doThis()       // Good - positive first

明确范围界定:根据PMD website ,这是一个有争议的规则。你可能讨厌它,别人喜欢它。您应该做的是将类中的所有字段设为私有(private)。似乎有一个具有包可见性的字段或方法(不是类),例如像这样:

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

最终参数:方法参数应该是最终的,以避免意外重新分配。这只是一个很好的做法。如果您使用的是 Eclipse,内容帮助甚至会提供名为 “尽可能将修饰符更改为最终修饰符” 的快速修复。只需使用 Ctrl-a 选择编辑器中的所有代码,然后按 Ctrl-1。

关于java - 如何解决以下 PMD 违规问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599446/

相关文章:

c - 带有 clang 的多个源文件的 AST

c# - 在代码合约中使用 Contract.ForAll

java - 使用/时无法映射到Spring Controller ,但可以使用/*

java - 我在 android 项目中包含的列表 fragment 似乎没有在运行时调用

code-analysis - 是否有任何工具可以确定对 Big-O 复杂性执行代码分析?

c# - CA1023背后的原因是什么

java - 如何以编程方式限制 Eclipse (Message)Console 的缓冲区大小?

java - 计算除字符串末尾以外的字符的所有出现次数

java - Java 中的 Checkstyle 和错误检测器

C# 静态分析,变量/参数的可能值