为什么PMD建议将JSONArray声明为final

时间:2015-07-08 16:08:27

标签: java pmd

我在源代码上运行了PMD,这有点像这样

JSONArray jsarray_com = new JSONArray();

后来我以这种方式向jsarray_com添加了一些元素

jsarray_com.put("One");
jsarray_com.put("Two");

现在提出的问题是,PMD建议将JSONArray声明为最终版本?

请你告诉我,如果它被宣布为最终的话会有什么好处

当我以这种方式进行更改时

final JSONArray jsarray_com = new JSONArray();

代码工作正常。

2 个答案:

答案 0 :(得分:3)

PMD检测到jsarray_com永远不会被重新分配,因此它建议在声明中添加final以使此事实明确。当您看到final时,您会立即知道jsarray_com将始终引用同一个对象。它使代码更容易理解,但您可以忽略该建议。

尽可能使用final也可能有助于JVM优化您的代码,尽管最后一点并不相关。事实上,大多数JVM能够在没有用户输入的情况下解决这个问题,就像PMD一样。

请注意,将变量声明为final并不会阻止您通过.put()等方法修改对象。所以,例如,你可以这样做:

jsarray_com.put("foo");

但不是这样:

jsarray_com = anotherarray_com;

答案 1 :(得分:1)

我猜你的意思是PMD中的LocalVariableCouldBeFinal规则:这只是一个优化问题:因为PMD已经注意到你的变量只被分配一次,所以它建议你可以将它声明为final,因为它会产生一个最佳代码。

但是,我同意Tagir Valeev的评论:它可能是一种旧的优化技术,但在现代JIT编译器中,它没有任何区别。我通常会关闭此规则(或者至少忽略它)。声明最终成员和最终类是一个好习惯,但要声明最终的本地成员或参数...... psch!

相关问题