编码约定:CAPITAL_LETTERS中的最终类实例?

时间:2015-10-13 19:27:23

标签: java final conventions

原始类型的常量(final)应该用CAPITAL_LETTERS编写。但是类实例呢?例如,当它作为函数参数传递时,从内部类调用,并且应该声明为final 所有参数都应该是最终的吗?应该是这样吗

public static void myFunction(
    final MyClass CLASS_INSTANCE) {

    // Code.
}

3 个答案:

答案 0 :(得分:5)

  

CAPITAL_LETTERS ...类实例怎么样?

不。那会很奇怪。参数使用驼峰案例。事物final的事实不会影响案例的约定。

  

所有参数都应该是最终的吗?

没有。声明事物final,如果它们不应该改变。这通常适用于参数,但并非总是如此。

声明某些内容final可以做两件事:它可以帮助找到一些错误,这些错误可能会在初始化之后无法初始化或者可以更改;它充当了编译器的提示,允许进行一些优化。

答案 1 :(得分:1)

不,最终参数不应全写大写 - 它们不是常量。

术语常量final不是同义词。

大写确实用于常量as specified by early Java naming conventions

  

声明类常量和ANSI常量的变量名称应全部为大写,并以下划线(“_”)分隔。

但并非所有声明为final的变量都是常量。来自Java language specification, section 4.12.4, "Final variables"

  

常量变量是基本类型或类型String的最终变量,使用常量表达式(第15.28节)进行初始化。

参数不是常量。它们不是用常量表达式初始化的。在您的示例中,参数不是基本类型或字符串。

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

答案 2 :(得分:0)

从一个挑剔开始:Java实际上没有常量。它有最终的静态变量,对于所有意图和目的,它们通常表现得像常量。但是在一些罕见的情况下,即使它们具有原始类型,它们的行为也不同(并且意外)。

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

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

参数应该声明为final吗?什么时候,会议停止,只是品味开始。有人说是的,有人说没有。我属于“不”阵营。如果您尝试修改它,那么通过提供编译器错误可以帮助防止引入错误。但是,如果您的方法体太长而实际上需要此帮助,那么您的方法应该可能会被重构。另一方面,我发现没有final个关键字的参数列表更容易阅读和更清晰,所以我倾向于将它们排除在外。