我在源代码上运行了PMD,这有点像这样
JSONArray jsarray_com = new JSONArray();
后来我以这种方式向jsarray_com添加了一些元素
jsarray_com.put("One");
jsarray_com.put("Two");
现在提出的问题是,PMD建议将JSONArray声明为最终版本?
请你告诉我,如果它被宣布为最终的话会有什么好处
当我以这种方式进行更改时
final JSONArray jsarray_com = new JSONArray();
代码工作正常。
答案 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!