编码约定:CAPITAL_LETTERS 中的最终 class 实例?
Coding conventions: final class instance in CAPITAL_LETTERS?
原始类型的常量(final
)应该写成CAPITAL_LETTERS。但是 class 实例 呢?例如,当它作为函数参数传递时,从内部 class 调用并且应该 声明为 final。 所有参数都应该是最终的吗?是不是应该这样呢:
public static void myFunction(
final MyClass CLASS_INSTANCE) {
// Code.
}
CAPITAL_LETTERS
... What about a class instance?
没有。那会很奇怪。参数使用驼峰式大小写。某些东西是 final
的事实不会影响大小写约定。
Are all parameters supposed to be final?
没有。声明事物 final
如果它们不应该改变。这通常适用于参数,但并非总是如此。
声明某些东西 final
有两个作用:它有助于找出某些东西从未被初始化或在初始化后可以更改的错误;并提示编译器允许进行一些优化。
不,最终参数不应全部大写 -- 它们不是常量。
术语常量 和final
不是同义词。
大写确实用于常量,as specified by early Java naming conventions。
The names of variables declared class constants and of ANSI constants should be all uppercase with words separated by underscores ("_").
但并非所有 final
声明的变量都是常量。 来自 Java language specification, section 4.12.4, "Final variables":
A constant variable is a final variable of primitive type or type String that is initialized with a constant expression (§15.28).
参数不是常量。它们不是用常量表达式初始化的。在您的示例中,参数不是原始类型或字符串。
因此,参数以混合大小写形式指定,首字母小写。
首先要吹毛求疵:Java 确实没有常量。它具有 final 静态变量,出于所有意图和目的,这些变量通常表现得像常量。但在某些罕见情况下,它们的行为会有所不同(而且出乎意料),即使它们具有原始类型也是如此。
无论如何,按照惯例,行为类似于常量的变量以大写字母命名。例如,java.awt.Color
定义了 Color
类型的常量 RED
和 BLUE
。 (它还定义了常量 red
和 blue
,但由于 RED
和 BLUE
是后来添加的,我怀疑 Sun/Oracle 的人认为这些名称是错误的。)
但是参数不是常量,并且行为与它们不同。对于每个方法调用,它们都可以有不同的值。因此参数总是以驼峰命名,即使它们被声明为最终的。
参数是否应该声明为最终的?什么时候,这里是惯例停止和纯粹品味开始的地方。有人说是,有人说不是。我属于 "no" 阵营。如果您尝试修改参数,则将参数设置为 final 可以通过给出编译器错误来帮助防止引入错误。但是,如果您的方法主体太长以至于您确实需要此帮助,那么您的方法可能应该重构。另一方面,我发现没有 final
关键字的参数列表到处都更容易阅读和清晰,所以我倾向于将它们排除在外。
原始类型的常量(final
)应该写成CAPITAL_LETTERS。但是 class 实例 呢?例如,当它作为函数参数传递时,从内部 class 调用并且应该 声明为 final。 所有参数都应该是最终的吗?是不是应该这样呢:
public static void myFunction(
final MyClass CLASS_INSTANCE) {
// Code.
}
CAPITAL_LETTERS
... What about a class instance?
没有。那会很奇怪。参数使用驼峰式大小写。某些东西是 final
的事实不会影响大小写约定。
Are all parameters supposed to be final?
没有。声明事物 final
如果它们不应该改变。这通常适用于参数,但并非总是如此。
声明某些东西 final
有两个作用:它有助于找出某些东西从未被初始化或在初始化后可以更改的错误;并提示编译器允许进行一些优化。
不,最终参数不应全部大写 -- 它们不是常量。
术语常量 和final
不是同义词。
大写确实用于常量,as specified by early Java naming conventions。
The names of variables declared class constants and of ANSI constants should be all uppercase with words separated by underscores ("_").
但并非所有 final
声明的变量都是常量。 来自 Java language specification, section 4.12.4, "Final variables":
A constant variable is a final variable of primitive type or type String that is initialized with a constant expression (§15.28).
参数不是常量。它们不是用常量表达式初始化的。在您的示例中,参数不是原始类型或字符串。
因此,参数以混合大小写形式指定,首字母小写。
首先要吹毛求疵:Java 确实没有常量。它具有 final 静态变量,出于所有意图和目的,这些变量通常表现得像常量。但在某些罕见情况下,它们的行为会有所不同(而且出乎意料),即使它们具有原始类型也是如此。
无论如何,按照惯例,行为类似于常量的变量以大写字母命名。例如,java.awt.Color
定义了 Color
类型的常量 RED
和 BLUE
。 (它还定义了常量 red
和 blue
,但由于 RED
和 BLUE
是后来添加的,我怀疑 Sun/Oracle 的人认为这些名称是错误的。)
但是参数不是常量,并且行为与它们不同。对于每个方法调用,它们都可以有不同的值。因此参数总是以驼峰命名,即使它们被声明为最终的。
参数是否应该声明为最终的?什么时候,这里是惯例停止和纯粹品味开始的地方。有人说是,有人说不是。我属于 "no" 阵营。如果您尝试修改参数,则将参数设置为 final 可以通过给出编译器错误来帮助防止引入错误。但是,如果您的方法主体太长以至于您确实需要此帮助,那么您的方法可能应该重构。另一方面,我发现没有 final
关键字的参数列表到处都更容易阅读和清晰,所以我倾向于将它们排除在外。