为脚本结果编写一些自定义流阅读器时,类中存在很多常量(主要用于预期的标签和关键字),我想知道是否有任何类型的标准,约定或最佳实践把常量(在这里读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被丢弃以减轻上述示例代码。
答案 0 :(得分:4)
Oracle网站上有一套标准的约定。有一个reference to how to layout the source code将静态变量置于实例变量之前,但对于常量没有什么特别之处。
Oracle风格指南自1999年以来一直没有更新,并且警告它信息可能不再有效。 Google has a more up-to-date style guide,它说:
3.4.2班级成员订购
班级成员的顺序可以产生很大的影响 可学习性,但没有一个正确的方法可以做到这一点。 不同的班级可能会以不同的方式订购会员。
重要的是每个班级的成员都有一定的顺序 如果被问到,维护者可以解释它的顺序。例如,新的 方法不仅仅习惯性地添加到类的末尾,就像那样 将按照按时间顺序排列"按时间顺序排列"订购,这不是 逻辑排序。
通常的做法是将常数放在最重要的位置,但是没有绝对的授权。如果你有很多常量并且需要组织它们,那么在枚举中对它们进行分组将是另一种选择。
答案 1 :(得分:1)
惯用法,常量位于顶部,并以大写字母命名。正如@AlexisLeclerc在评论中所说,你应该只在多次使用时使用常量,否则你只是让代码更难阅读。然而,这是惯用的,而不是标准的。
如果您按照描述对班级中的内容进行分组,则可能表明您实际上应该有两个或更多班级。