我理解实例级final
变量遵循驼峰式命名约定,但我想知道是否应该是Singleton类的情况。
您会将Singleton类中的final
视为常量,并遵循常量命名约定,如下所示:
private final SomeObject SOME_OBJECT;
或者,您是否会按照正常的变量命名约定命名为camel case?
private final SomeObject someObject;
这在多个代码评论中不断出现,我总是有一些灰色区域。感谢对此的任何想法。
答案 0 :(得分:2)
根据典型的Java编码标准,ALL_CAPS标识符样式是为static final
常量(和enum
常量...)保留的。在您的情况下,变量是final
但不是static
,因此变量的常规规则的例外不适用。
这是我的解释,我认为最常见的解释。这不是唯一的解释。但是,您/您的团队可以选择以不同方式解释约定,甚至完全忽略它们 1 。
最重要的是在您/您的团队/您的组织/公共代码库之间保持一致。
1 - ...虽然后者不明智,IMO,
答案 1 :(得分:0)
这是一个更多基于社区意见而非基于既定标准的主题。
如果它是在类级别,并且它是最终的,并且只有一个实例,假设你使用它作为常量,在我看来,我会使用Underscore,因为它基本上是一个常量,但它在运行时初始化。
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
。