编码约定:用大写字母表示的最终类实例



基本类型的常量(final)应该用大写字母书写。但是类实例呢?例如,当它作为函数参数传递时,从内部类调用,应该声明为 final所有参数都应该是final吗?如果是这样的话:

public static void myFunction(
    final MyClass CLASS_INSTANCE) {
    // Code.
}

CAPITAL_LETTERS…那么类实例呢?

不。那会很奇怪。参数使用驼峰格式。final并不影响大小写的约定。

所有参数都应该是final吗?

。如果不应该改变,就声明为final。这通常适用于参数,但并非总是如此。

声明final可以做两件事:它可以帮助找出一些从未初始化或初始化后可以更改的错误;它作为一个提示,编译器允许一些优化。

不,final形参不应该全大写——它们不是常量。

术语常数final不是同义词。

大写确实用于常量,正如早期Java命名约定所指定的那样。

声明为类常量和ANSI常量的变量名应该全部大写,单词之间用下划线(_)分隔。

但并非所有final声明的变量都是常量。来自Java语言规范,第4.12.4节,"最终变量":

常量变量是用常量表达式初始化的原始类型或String类型的final变量(第15.28节)。

形参不是常量。不是用常量表达式初始化的。在您的示例中,参数不是基本类型或String。

因此,参数以混合形式指定,首字母小写。

从一个小问题开始:Java并没有真正的常量。它有final静态变量,无论出于何种目的,这些变量通常表现得像常量。但是在一些罕见的情况下,它们的行为不同(并且出乎意料),甚至当它们具有原始类型时。

无论如何,按照约定,行为类似常量的变量都以大写字母命名。例如,java.awt.Color定义了类型为Color的常量REDBLUE。(它还定义了常量redblue,但由于REDBLUE是后来添加的,我怀疑Sun/Oracle的人认为这些名字是错误的。)

但是形参不是常量,其行为也不像常量。对于每个方法调用,它们可以有不同的值。因此,参数总是以驼峰形式命名,即使它们被声明为final。

参数应该声明为final吗?在这里,传统停止了,纯粹的品味开始了。有些人同意,有些人不同意。我属于"不"阵营。将参数设为final可以帮助防止在试图修改它时产生编译器错误而引入bug。但是,如果您的方法体太长,以至于您实际上需要这种帮助,那么您的方法可能应该被重构。另一方面,我发现没有final关键字的参数列表更容易阅读和更清晰,所以我倾向于把它们删掉。

最新更新