需要了解一条PMD规则

时间:2013-02-10 09:55:44

标签: java optimization code-cleanup

我使用PMD工具查找java代码中的错误(如果有的话)。 PMD给出的一个常见建议是“局部变量{local_variable}可以被声明为final”。如果状态没有进一步改变,是否有必要将所有局部变量声明为final?

2 个答案:

答案 0 :(得分:2)

  

如果所有局部变量的状态没有进一步改变,是否有必要将其声明为最终变量?

不是没有必要,除了在一种情况下:如果你需要在匿名类中访问该变量。

  

当所有本地变量不变时,最好将其作为最终变量吗?

这显然是主观的 - 我个人认为它不必要地使代码混乱,并且如果你遵循良好的编码实践,你的方法应该足够短并且不言自明,不应该要求你的变量是最终的。

答案 1 :(得分:1)

这也是语言设计的一个问题,即将变量显式设置为final并让final关键字出现在各处。在scala中,默认设置是将所有内容都设置为最终且不可变,从而推动更具功能性的设计。如果你想知道为什么要使用final,请看一下scala - 这应该会给你一些想法。

我认为不顺便使用final是不好的风格。最终变量 - 在这个意义上的好或常量 - 不能改变。这是一种编程合同。在具有最终变量的代码中,您只会减少副作用。如果你把它留下来,你也可以省略所有的私人领域。为什么要这么麻烦?

在eclipse中,当你打开“Source / Clean Up ...”对话框时,你可以自动添加所有必需的最终字段和许多其他被认为是“更干净”的东西(所以我猜它叫做“清理”因为不使用final会被视为不洁净。)

取决于你 - 使用它 - 或者离开它。使用它 - 特别注意无法应用final的代码。也许这段代码可以改进为最终版?

所以:是的!这是一种很好的做法!