java - 在 Java 中适用时使用 "final"修饰符

标签 java oop

在 Java 中,有一种做法是声明每个变量(本地或类),如果它们确实是参数 final。

虽然这使代码更加冗长,但这有助于轻松阅读/掌握代码,并且由于意图明确标记,还可以防止错误。

你对此有什么想法,你遵循什么?

最佳答案

沉迷于:

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

考虑但谨慎使用:

  • 最终类 - 框架/API 设计是我考虑的唯一案例。
  • Final 方法 - 与 final 类基本相同。如果您正在使用模板方法模式(例如疯狂并将内容标记为 final),那么您可能过于依赖继承而没有足够的委托(delegate)。

除非感觉肛门,否则忽略:

  • 方法参数和局部变量 - 我很少这样做,主要是因为我很懒,而且我发现它会使代码变得困惑。我完全承认我不会修改的标记参数和局部变量是“更正确的”。我希望它是默认值。但事实并非如此,而且我发现随着 final 的结束,代码更难理解。如果我在别人的代码中,我不会把它们拉出来,但如果我正在编写新代码,我不会把它们放进去。一个异常(exception)是你必须标记一些最终的东西以便你可以访问它来自匿名内部类。

关于java - 在 Java 中适用时使用 "final"修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/137868/

相关文章:

支持创建 "wizard-like"命令行应用程序的 Java 框架/库

arrays - 如何将数组/列表添加到对象

python - 我应该直接调用 object.__str__() 吗?

java - 包含多个根元素的 XML 文件

java - 使用java和mysql服务器的读/写模式

java - Solaris 上的 OptaPlanner 比 Linux 操作系统上慢 5 倍

java - 声明子类中需要存在的字段的正确方法?

java - 如何在方法java之外使用它的构造函数实例化对象

c++ - 具有一个成员的命名空间或类?

java - 传递一个字符串数组作为参数