在可能的情况下声明变量“final”是一个好习惯吗?

时间:2012-05-21 18:16:22

标签: java final

  

可能重复:
  When should one use final?

除非必要,否则我倾向于声明所有变量final。我认为这是一个很好的做法,因为它允许编译器检查标识符是否按预期使用(例如,它没有变异)。另一方面,它使代码混乱,也许这不是“Java方式”。

我想知道是否存在关于非必要使用最终变量的普遍接受的最佳做法,以及是否应该让这个讨论有其他权衡或方面。

8 个答案:

答案 0 :(得分:14)

“Java方式”本身就是一种内在的混乱。

我说这是一个很好的做法,但不是我遵循的做法。

测试通常可以确保我按照自己的意愿行事,而且对于我的美学来说,它也是。“

答案 1 :(得分:12)

我认为这是一个很好的做法,对于维护程序员(包括我!)而言比编译器更多。如果我不需要担心哪个变量可能会在其中发生变化,那么考虑一个方法会更容易。

答案 2 :(得分:10)

我经常将final应用于我的代码中的局部变量,并且在首次使用{{标记所有效率最终变量后,更容易找到读取代码1}}关键字。我认为这是对代码的真正增强,并在此后立即提交。

至于代码杂乱的问题,当应用于局部变量时,我发现它不具有破坏性 - 实际上它使我更容易因语法着色而发现所有声明。

但是,我必须承认,当final用于参数,catch块,增强型for循环以及除局部变量之外的所有其他位置时,我会发现它难以忍受地混乱。狭义。这是非常不幸的,因为在这些情况下的重新分配更加令人困惑,而且默认情况下它们应该是最终的。

答案 3 :(得分:5)

是的,这是一个非常好的主意,因为它清楚地显示了在对象构造中必须提供哪些字段。

我强烈反对它造成“代码混乱”;它是语言的一个优秀而强大的方面。

作为一个设计原则,如果可以的话,你应该制作你的课程immutable(所有最后的字段),因为它们可以安全地发布(即自由传递而不用担心它们会被破坏)。虽然注意字段本身也需要是不可变对象。

答案 4 :(得分:3)

它肯定会为您提供更好的代码,很容易看出所有变量都将被更改。

它还通知编译器它不会改变哪个可以导致更好的优化。

如果您倾向于犯任何错误,它允许您的IDE为您提供编译时通知。

答案 5 :(得分:0)

一些好的分析工具,比如PMD,除非必要,否则总是提出final的建议。因此,该工具的惯例表明它是一种很好的做法

但我认为代码中的这么多最终代币可能会降低人性化。

答案 6 :(得分:0)

你几乎总结了利弊..​​....

我可以添加另一个骗局:

代码的读者根本不需要推理最终变量的值(罕见的坏代码情况除外)。

所以,是的,这是一个很好的做法。

在你习惯它之后,杂乱并不是那么糟糕(比如unix :-P)。此外,典型的IDE会自动为您做...

答案 7 :(得分:0)

我会说是,不是为了编译器优化,而是为了可读性。

但我个人不使用它。 Java本身就很冗长,如果我们遵循所有被认为是“良好实践”的东西,代码将无法从所有样板中获得。不过,这是一个偏好的问题。