定义常量的最佳实践 - 内部类或内部接口?

时间:2014-09-13 10:18:10

标签: java class interface constants

我有一个只有常数的类。代码片段是:

public class CommonConstant
{

    public static final String  DAY                 = "DAY";
    public static final String  WEEK                = "WEEK";
    public static final String  MONTH               = "MONTH";
    public static final String  YEAR                = "YEAR";
    public static final String  ACCEPTED            = "accepted";
    public static final String  REJECTED            = "rejected";
    public static final String  ADDED               = "added";
    public static final String  MODIFIED            = "modified";

}

在类文件中指定常量或者它应该在接口中是不错的做法? 什么是好的做法?

2 个答案:

答案 0 :(得分:4)

由于常量涉及实现,因此您应该将它们放入具有私有构造函数的类中,或者使用枚举。 Effective Java 2nd Edition中的Joshua Bloch不鼓励使用“常量接口”。

Bloch说接口应仅用于定义类型,并且当类实现接口时,这个接口用作引用实例的类型 - 将接口用于任何其他目的是不合适的。如前所述,常量是实现

以及有关常量接口的更多信息

  

如果在将来的版本中修改了类,则不再需要它   要使用常量,它仍然必须实现接口以确保   二进制兼容性如果非最终类实现常量   接口,它的所有子类都会污染它们的名称空间   通过界面中的常量

BlocHquoted:)

HTH,Carlo

答案 1 :(得分:4)

What is a good practice

这实际上是一种很好的做法

public enum EnumTest {
    DAY("DAY"), WEEK("WEEK"), MONTH("MONTH"), YEAR("YEAR");

    private String value;

    private EnumTest(String s) {
        value = s;
    }

    public String getValue() {
        return value;
    }

}

然后在其他地方

System.out.println(EnumTest.DAY.getValue()); // give you the value

for(EnumTest e :EnumTest.values()){ //values return an array of enum values
    System.out.println(e);
}