【问题标题】:Java Singleton Class Final Variable Naming ConventionJava Singleton 类最终变量命名约定
【发布时间】:2018-05-05 00:00:59
【问题描述】:

我了解实例级 final 变量遵循驼峰式命名约定,但我想知道单例类是否也应如此。

您是否会将单例类中的final 视为常量并遵循如下常量命名约定:

private final SomeObject SOME_OBJECT;

或者,您会按照正常的变量命名约定以驼峰式命名它吗?

private final SomeObject someObject;

这在多次代码审查中不断出现,我总是有一些灰色区域。感谢您对此的任何想法。

【问题讨论】:

  • 不是final,也不是static
  • @Elliott Frisch 对不起,我的错。更新了问题。

标签: java naming-conventions naming


【解决方案1】:

根据典型的 Java 编码标准和约定,ALL_CAPS 标识符样式为static final 常量(和enum 常量...)保留。在您的情况下,变量是 final 但不是 static,因此变量的正常规则的例外情况不适用。

这是我的解释,也是(我认为)最常见的解释。这不是唯一的解释。您和您的团队可以选择以不同的方式解释约定,甚至完全忽略它们1

最重要的是在您/您的团队/您的组织的通用代码库中保持一致。


1 - ...虽然后者是不明智,IMO,

【讨论】:

    【解决方案2】:

    这是一个更多基于社区意见而非固定标准的主题。

    如果它在类级别,并且它是最终的,并且只有一个实例,假设您将它用作常量,在我看来,我会使用下划线,因为它基本上是一个常量,但它在运行时初始化。

    class AClass {
        private final SomeObject SOME_OBJECT;
        private initInstance() {
            SOME_OBJECT = ...;
        }
        ...
    }
    

    这可能是一个有用的链接: https://softwareengineering.stackexchange.com/questions/252243/naming-convention-final-fields-not-static

    这个链接归结为,虽然任何答案都是固执己见,但一个好的启发式方法是问自己“这表现得像一个常数吗?还是表现得像一个只写一次的字段?”

    如果是在运行时生成的常量,DO_THIS

    如果它是您写入一次但稍后操作的字段,doThis

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 2012-09-13
      • 2020-11-06
      • 2020-05-05
      • 2016-01-08
      • 1970-01-01
      • 2012-08-10
      • 2018-11-22
      相关资源
      最近更新 更多