何时应将 final 用于方法参数和局部变量?

2022-08-31 06:32:24

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

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

这是我应该努力记住的事情吗?


答案 1

痴迷于:

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

考虑但明智地使用:

  • 最终类 - 框架/API设计是我考虑的唯一情况。
  • 最终方法 - 与最终类基本相同。如果你正在疯狂地使用模板方法模式,并将东西标记为最终,那么你可能过于依赖继承,而对委派的依赖不够。

忽略,除非感觉肛门:

  • 方法参数和局部变量 - 我很少这样做,主要是因为我很懒惰,我发现它使代码混乱。我完全承认,标记我不打算修改的参数和局部变量是“更正确的”。我希望这是默认设置。但事实并非如此,我发现代码在总决赛中更难理解。如果我在别人的代码中,我不会把它们拉出来,但如果我正在写新代码,我不会把它们放进去。一个例外是,您必须将某些内容标记为最终版本,以便可以从匿名内部类中访问它。

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


答案 2

这是我应该努力记住的事情吗?

否,如果您使用的是 Eclipse,因为您可以配置“保存操作”以自动为您添加这些最终修饰符。然后,您可以以更少的努力获得好处。


推荐