我是否应该按照 Java 约定将最终的“原子…”成员字段命名为常量(全部大写)?
Should I name final `Atomic…` member fields as constants (in all uppercase) per Java conventions?
当定义一个the Atomic…
classes类型的变量,并标记为final
以避免替换时,这样的变量是否被认为是常量?
由于final
,命名变量中包含的对象引用不会改变。然而,Atomic…
对象实际上只是一个有效载荷的保护包装,一个很可能会改变的值。
我的问题是 Java 命名约定。按照惯例,final
成员字段或 final static
等常量应以全大写形式命名。所以我开始想知道如何命名 Atomic…
的对象引用,例如 AtomicInteger
.
这是一个人为的例子class。
➥ final private AtomicInteger
应该命名为 count
还是 COUNT
?
package work.basil.example;
import java.util.concurrent.atomic.AtomicInteger;
public class CountUp
{
final private AtomicInteger count; // `count` or `COUNT` ?
public CountUp ( )
{
this.count = new AtomicInteger();
}
public int increment ( )
{
return this.count.incrementAndGet();
}
public int getCount ( )
{
return this.count.get();
}
}
您可能认为此问题与 Should a “static final Logger” be declared in UPPER-CASE? or Should I use upper-case naming to declare java constant variables? 等问题重复。但不是。我相信 Atomic…
对象的性质使这个问题变得有趣。
我的第一个想法是:上下文就是一切。 在有关特定线程安全问题的对话中,我会将 AtomicInteger
称为常量。但是在业务逻辑的上下文中,Atomic
的有效负载是要改变的。我不会认为 Atomic
实际上是一个常量。所以我倾向于用通常的 camelCase.
命名
Google 的代码风格指南指出,引用可变对象的 final 字段不被视为“常量”并且不被大写。
https://google.github.io/styleguide/javaguide.html
引用部分5.2.4 常量名称:
But what is a constant, exactly?
Constants are static final fields whose contents are deeply immutable and whose methods have no detectable side effects. This includes primitives, Strings, immutable types, and immutable collections of immutable types. If any of the instance's observable state can change, it is not a constant. Merely intending to never mutate the object is not enough.
该部分的一些示例:
// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set<String> mutableCollection = new HashSet<String>();
当定义一个the Atomic…
classes类型的变量,并标记为final
以避免替换时,这样的变量是否被认为是常量?
由于final
,命名变量中包含的对象引用不会改变。然而,Atomic…
对象实际上只是一个有效载荷的保护包装,一个很可能会改变的值。
我的问题是 Java 命名约定。按照惯例,final
成员字段或 final static
等常量应以全大写形式命名。所以我开始想知道如何命名 Atomic…
的对象引用,例如 AtomicInteger
.
这是一个人为的例子class。
➥ final private AtomicInteger
应该命名为 count
还是 COUNT
?
package work.basil.example;
import java.util.concurrent.atomic.AtomicInteger;
public class CountUp
{
final private AtomicInteger count; // `count` or `COUNT` ?
public CountUp ( )
{
this.count = new AtomicInteger();
}
public int increment ( )
{
return this.count.incrementAndGet();
}
public int getCount ( )
{
return this.count.get();
}
}
您可能认为此问题与 Should a “static final Logger” be declared in UPPER-CASE? or Should I use upper-case naming to declare java constant variables? 等问题重复。但不是。我相信 Atomic…
对象的性质使这个问题变得有趣。
我的第一个想法是:上下文就是一切。 在有关特定线程安全问题的对话中,我会将 AtomicInteger
称为常量。但是在业务逻辑的上下文中,Atomic
的有效负载是要改变的。我不会认为 Atomic
实际上是一个常量。所以我倾向于用通常的 camelCase.
Google 的代码风格指南指出,引用可变对象的 final 字段不被视为“常量”并且不被大写。
https://google.github.io/styleguide/javaguide.html
引用部分5.2.4 常量名称:
But what is a constant, exactly?
Constants are static final fields whose contents are deeply immutable and whose methods have no detectable side effects. This includes primitives, Strings, immutable types, and immutable collections of immutable types. If any of the instance's observable state can change, it is not a constant. Merely intending to never mutate the object is not enough.
该部分的一些示例:
// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set<String> mutableCollection = new HashSet<String>();