一尘不染

Java什么时候应该对方法参数和局部变量使用final?

java

我发现了一些参考(例如),它们建议final尽可能多地使用它,我想知道这有多重要。这主要是在方法参数和局部变量的上下文中,而不是最终方法或类。对于常量,这很明显。

一方面,编译器可以进行一些优化,使程序员的意图更加清晰。另一方面,它增加了冗长性,并且优化可能微不足道。

我需要努力记住的东西吗?


阅读 1001

收藏
2020-03-06

共1个答案

一尘不染

  • 最终字段-将字段标记为最终字段会强制它们在构造结束时进行设置,从而使该字段引用不变。这样可以安全地发布字段,并且可以避免在以后的读取中进行同步。(请注意,对于对象引用,只有字段引用是不可变的-对象引用所引用的内容仍然可以更改,并且会影响不可变性。)
  • 最终静态字段-尽管我在以前使用静态最终字段的许多情况下都使用枚举。
    考虑但要谨慎使用:

  • 最终课程-框架/ API设计是我唯一考虑的情况。

  • 最终方法-与最终类基本相同。如果你使用的是疯狂的模板方法模式,并且将内容标记为final,则可能是你对继承的依赖过多,而对委托的依赖则不够。
    除非感到肛门,否则忽略:

  • 方法参数和局部变量-我很少这样做,主要是因为我很懒,并且发现它会使代码混乱。我将完全承认,我将不修改的标记参数和局部变量是“正确的”。我希望它是默认设置。但是事实并非如此,我发现遍历Final的代码更加难以理解。如果我使用别人的代码,则不会删除它们,但是如果我正在编写新代码,则不会放入它们。一个例外是必须标记一些最终内容以便可以访问它来自一个匿名内部类。

  • 编辑:请注意,@ adam-gent提到的最终局部变量实际上非常有用的一个用例是,在if/ else分支中将值分配给var时。

2020-03-06