Java 单例 Class 最终变量命名约定

Java Singleton Class Final Variable Naming Convention

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

你会把 Singleton Class 中的 final 当作常量,并遵循如下常量命名约定:

private final SomeObject SOME_OBJECT;

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

private final SomeObject someObject;

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

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

如果是class级别,而且是final,而且只有一个实例,假设你把它当做常量使用,在我看来,我会用Underscore,因为它是基本上是一个常量,但它是在运行时初始化的。

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

这可能会有帮助 link: https://softwareengineering.stackexchange.com/questions/252243/naming-convention-final-fields-not-static

这个 link 归结为,虽然任何答案都是自以为是的,但一个好的启发式方法是问问自己 "is this behaving like a constant? or is it behaving like a write once field?"

如果它是在运行时创建的常量,DO_THIS

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

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

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

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


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