有一条规则说:
表示常量(最终变量)的
名称必须全部大写,并使用下划线分隔单词(取自http://geosoft.no/development/javastyle.html)
这对于像int或string这样的原语类型很有效:
private static final int MAX_COUNT = 10;
但是非原语类型又是什么呢?在大多数情况下,我看到了以下情况:
private static final Logger log = Logger.getLogger(MyClass.class);
或者在单例中,其中实例变量不是大写的。
问题是,声明这些类型的变量(如日志和实例)的正确方式是什么?
发布于 2011-08-31 23:49:38
这仍然是一个常量。有关常量命名约定的详细信息,请参阅JLS。但在现实中,这完全是偏好的问题。
接口类型中的常量名称应该是,类类型的
final
变量通常可以是一个或多个单词、首字母缩写或缩写的序列,全部大写,组件由下划线"_"
字符分隔。常量名称应该是描述性的,而不是不必要的缩写。按照惯例,它们可以是任何适当的词性。常量的名称示例包括MIN_VALUE
、MAX_VALUE
、MIN_RADIX
和Character
类的MAX_RADIX
。
一组代表一个集合的可选值的常量,或者,在较少的情况下,表示整数值中的掩码位的一组常量,有时可以用常用的缩写词作为名称前缀来指定,例如:
接口ProcessStates { int PS_RUNNING = 0;int PS_SUSPENDED = 1;}
涉及常量名称的模糊处理很少见:
由于它们是可分辨的syntactically.,因此
发布于 2011-08-31 23:51:12
语言并不关心。重要的是遵循你正在工作的项目的既定风格和惯例,这样其他维护者(或五个月后的你)就有最好的机会不会被弄糊涂了。
我认为可变对象的全大写名称肯定会让我感到困惑,即使对该对象的引用恰好存储在static final
变量中。
发布于 2014-11-29 12:59:00
对对象的常量引用不是常量,它只是对对象的常量引用。
private static final
不是定义一个常量或不是常量的东西。这只是Java定义常量的方式,但这并不意味着每个private static final
声明都是用来定义常量的。
当我编写private static final Logger
时,我并不是想定义一个常量,我只是想定义一个对一个对象的引用,这个对象是private
(它不能从其他类访问)、static
(它是一个类级变量,不需要实例)和final
(它只能赋值一次)。如果它恰好与Java期望您声明一个常量的方式一致,那么,不幸的是,它不会使它成为常量。我不关心编译器、声纳或任何Java专家说什么。常量值是一回事,像MILLISECONDS_IN_A_SECOND = 1000
这样的常量值是一回事,而对对象的常量引用是另一回事。
众所周知,黄金是会发光的,但并不是所有发光的都是黄金。
https://stackoverflow.com/questions/7259687
复制相似问题