【发布时间】:2014-03-14 18:46:04
【问题描述】:
在为脚本结果编写一些自定义流阅读器时,类中存在相当多的常量(主要用于预期的标签和关键字),我想知道是否有任何类型的标准、约定或最佳实践将常量(在此处阅读 static final 字段)放入类中?
更具体地说,最好将每个常量放在类的顶部,还是将它们分组到类中有用的区域,然后将公共放在顶部?
通过将所有内容都放在顶部,在我看来这可能会更容易在同一个地方找到您正在寻找的所有内容,但如果这个区域变得更大,它可能会变得不堪重负:
public class Test {
// Constants.
private static final String CLASSNAME = Test.class.getSimpleName();
private static final String COMMON = " = ";
private static final String CONSTRUCTOR = "#constructor";
private static final String METHOD_1 = "#method1";
private static final String METHOD_2 = "#method2";
public Test(String message) {
System.out.println(CLASSNAME + CONSTRUCTOR + COMMON + message);
method1(message);
method2(message);
}
private void method1(String message) {
System.out.println(CLASSNAME + METHOD_1 + COMMON + message);
}
private void method2(String message) {
System.out.println(CLASSNAME + METHOD_2 + COMMON + message);
}
public static void main(String[] args) {
new Test("Hello world!");
}
}
通过对它们进行分组,对仅在类的特定区域中使用的常量更有意义,但它可能会破坏按类型分组添加到类中的良好对称效果,并且可能会让它看起来凌乱:
public class Test {
// Common constants.
private static final String CLASSNAME = Test.class.getSimpleName();
private static final String COMMON = " = ";
// Constructor constants.
private static final String CONSTRUCTOR = "#constructor";
public Test(String message) {
System.out.println(CLASSNAME + CONSTRUCTOR + COMMON + message);
method1(message);
method2(message);
}
// Constant proper to method1(...).
private static final String METHOD_1 = "#method1";
private void method1(String message) {
System.out.println(CLASSNAME + METHOD_1 + COMMON + message);
}
// Constant proper to method2(...).
private static final String METHOD_2 = "#method2";
private void method2(String message) {
System.out.println(CLASSNAME + METHOD_2 + COMMON + message);
}
public static void main(String[] args) {
new Test("Hello world!");
}
}
输出:
Test#constructor = Hello world!
Test#method1 = Hello world!
Test#method2 = Hello world!
我知道这可能是一种主观问题,但我主要想知道是否有任何(非)官方文件说明了这一点,或者上述哪种情况被认为是最佳实践并且更适合工作适合普通程序员。
请注意,Javadoc 已被丢弃以减轻上述示例代码的负担。
【问题讨论】:
-
您真的打算在每次方法调用时都写入 System.out 吗?为什么将这些字符串定义为常量?它们只使用一次,并且使用常量会使代码的可读性低于直接使用文字字符串。
-
@JBNizet 这个简单的代码只是为了这个问题的一个例子,我选择了
String,但它可以是任何类型。当然,定义 use once 字段有点过多,但请尝试将上面定义的常量外推为在实际使用中的类(或方法)中多次使用。
标签: java coding-style constants standards conventions