未初始化常量Java的命名约定

时间:2016-07-12 15:34:51

标签: java naming-conventions

我将static final的常量命名为ALL_UPPER_CASE

但是,有时您需要将字段用作常量,但不能将其定义为final,因为它需要稍后初始化。

例如:

public class ExampleClass {
     public static final int MAX_LENGTH = 100;
     public static int constantValue;

     public ExampleClass() {
          // ...
     }

     private static void init(boolean condition) {
          if (condition) {
             constantValue = 42;
          } else {
             constantValue = 1;
          }
     }
}

问题:这些是否有任何类型的命名约定?你会怎么做或去做?

我只想知道一些事情;这就是全部!

1 个答案:

答案 0 :(得分:1)

从技术上讲,constantValue不是常数。它只是一个静态字段,在初始化后不会改变。我会坚持使用Sun命名约定并保留名称camelCase。 但是,在你给出的情况下,如果我绝对想表明这是一个常数,我会创建一个枚举:

public enum ExampleEnum {

    TRUE_CONDITION(42), FALSE_CONDITION(1);

    private final int value;

    private ExampleEnum(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

}

然后ExampleClass将成为:

public class ExampleClass {
    public static final int MAX_LENGTH = 100;
    private static ExampleEnum myEnum;

    private static void init(boolean condition) {
        if (condition) {
            myEnum = ExampleEnum.TRUE_CONDITION;
        } else {
            myEnum = ExampleEnum.FALSE_CONDITION;
        }
    }

    public static int getConstantValue() {
        return myEnum.getValue();
    }

}

通过这种方式,您可以感觉到您正在使用常量,并且您没有打破封装。