Jam*_*ery 28 java code-analysis pmd
是否有一个很好的资源来描述PMD规则集背后的"原因"?PMD的网站有"什么" - 每个规则的作用 - 但它没有描述为什么PMD有这个规则以及为什么忽略该规则会让你在现实世界中遇到麻烦.特别是,我有兴趣知道为什么PMD有AvoidInstantiatingObjectsInLoops和OnlyOneReturn规则(如果你需要创建一个对应于集合中每个对象的新对象,第一个似乎是必要的,第二个似乎在许多情况下是必要的根据某些标准返回一个值),但我真正想要的是一个描述大多数PMD规则背后"原因"的链接,因为这经常出现.
为了清楚起见,我知道我可以禁用它们以及如何做到这一点,我只是想知道为什么它们首先在那里.对不起,如果有一些明显的东西我错过了,但我在发布之前进行了谷歌搜索和搜索.我也明白,这些问题往往是"品味"的问题 - 我正在寻找的是规则的论点是什么以及有什么替代品.举一个具体的例子,你应该如何实现一个对应于循环中每个对象的对象(这是Java中的常见操作)而不在循环中实例化每个对象?
jsi*_*ght 19
在每种情况下,规则可以是特定情况或只是"品味"的问题.
如果存在大量迭代且实例化很昂贵,则应避免在循环中实例化Object.如果您可以将代码移出循环,则可以避免许多对象实例化,从而提高性能.话虽如此,这并不总是可行的,在某些情况下,它与代码的整体性能无关.在这些情况下,做哪个更清楚.
对于OnlyOneReturn,有几种方法可以看到这一点(每个背后都有激烈的支持者),但它们基本上都归结为味道.
对于您的示例,OnlyOneReturn支持者想要代码如下:
public int performAction(String input) {
int result;
if (input.equals("bob")) {
result = 1;
} else {
result = 2;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
而不是:
public int performAction(String input) {
if (input.equals("bob")) {
return 1;
} else {
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,ReturnOnlyOnce的额外清晰度可以争论.
另请参阅此SO问题,该问题与循环内的实例化有关.
本文" Java的Bug查找工具的比较 ",作者Nick Rutar,Christian Almazan和Jeff Foster,比较了Java的几个bug检查器......" - FindBugs文档和出版物.PMD被认为更加冗长.
附录:正如作者所说,
"所有这些工具都会在产生误报和误报之间选择不同的权衡."
特别是,如果这是意图,则AvoidInstantiatingObjectsInLoops可能根本不是一个bug.它包含在内以帮助避免创建不必要的对象.同样,OnlyOneReturn本质上是暗示性的.多次返回表示goto的形式,有时被认为是有害的,但合理地用于提高可读性.
我的宠儿是那些在不理解误报概念的情况下强制使用这些工具的人.
如前所述这里,最近的版本PMD当集成到构建过程支持改进定制.
| 归档时间: |
|
| 查看次数: |
8402 次 |
| 最近记录: |