这些PMD规则的原因是什么?

Tho*_*ens 34 java pmd

DataflowAnomalyAnalysis:找到变量'变量'的'DD'异常(行'n1' - 'n2').

DataflowAnomalyAnalysis:找到变量'变量'的'DU'-anomaly(行'n1' - 'n2').

DD和DU听起来很熟悉......我想说的是关于最弱前后条件的测试和分析,但我不记得具体细节.

NullAssignment:将Object指定为null是代码气味.考虑重构.

null如果对象是本地对象(在方法之外没有使用),是不是设置一个对象来协助垃圾收集?或者这是一个神话?

MethodArgumentCouldBeFinal:参数'param'未分配,可以声明为final

LocalVariableCouldBeFinal:局部变量'variable'可以声明为final

使用final参数和变量有什么好处吗?

LooseCoupling:避免使用'LinkedList'之类的实现类型; 改为使用界面

如果我知道我特别需要一个LinkedList,为什么我不会用一个来明确表达未来开发人员的意图?返回有意义的类路径中最高的类是一回事,但为什么我不会声明我的变量是最严格的呢?

AvoidSynchronizedAtMethodLevel:使用块级别而不是方法级别同步

块级同步与方法级同步相比有哪些优势?

AvoidUsingShortType:不要使用短类型

我的第一语言是C和C++,但在Java世界中,为什么我不能使用最能描述我数据的类型呢?

eri*_*son 33

  • DD和DU异常(如果我没记错的话 - 我使用FindBugs并且消息有点不同)指的是为永远不会读取的局部变量赋值,通常是因为它在被读取之前被重新分配了另一个值.一个典型的例子null是在声明它时初始化一些变量.在需要之前不要声明变量.

  • 分配null给局部变量以"协助"垃圾收集器是一个神话.PMD让你知道这只是适得其反的混乱.

  • 在局部变量上指定final 应该对优化器非常有用,但是我没有任何利用这个提示的当前JIT的具体示例.我发现它有助于推理我自己的代码的正确性.

  • 根据......井,接口指定接口是一个很好的设计实践.您可以轻松更改集合的实现,而不会影响调用者.这就是接口的全部意义所在.

  • 我想不出有很多情况下,呼叫者就需要一个LinkedList,因为它不公开不是由一些接口声明的API.如果客户端依赖于该API,则可以通过正确的界面获得该API.

  • 块级同步允许关键部分更小,这允许尽可能多地同时完成工作.也许更重要的是,它允许使用由封闭对象私有控制的锁定对象.这样,您可以保证不会发生死锁.使用实例本身作为锁,任何人都可以错误地同步它,导致死锁.

  • 在任何操作short中都会提升类型的操作数int.此规则让您知道此促销正在发生,您也可以使用int.但是,使用该short类型可以节省内存,所以如果它是实例成员,我可能会忽略该规则.