2014-09-13 39 views
3

我有一个只有不变的类。代码片段是:定义常数的最佳实践 - 内部类或内部接口?

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"; 

} 

是在类文件中指定常量还是应该在接口中的好习惯? 什么是好习惯?

+6

可能! – 2014-09-13 10:19:34

+2

看看这个问题,我想这正是你想要的:http://stackoverflow.com/questions/1372991/should-a-collection-of-constants-be-placed-in-a-class-or-接口 – Bono 2014-09-13 10:20:34

+0

接口定义了任意类的所需行为 - 如果常量与所需的接口行为相关,则将常量放在那里! – ErstwhileIII 2014-09-13 15:29:46

回答

3

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

Bloch说接口只能用来定义类型,而当一个类实现一个接口时,这个接口可以用作引用实例的类型 - 将接口用于任何其他目的是不合适的。正如前面所说,常量是实现

多关于恒接口

,如果在未来的版本的类被修改,使得它不再需要 使用常量,它仍然必须实现接口确保 二进制兼容性。如果一个非最终类实现恒定 接口,它的所有子类都将有自己的命名空间中的接口

BlocHquoted :)

HTH,卡罗

+0

当您引用有效的java时,指向不鼓励使用接口的项目会很有用 – 2014-09-13 10:24:23

+0

Bloch不鼓励它,因为... – 2014-09-13 10:24:30

3

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); 
} 
+0

对于enum构造函数,private修饰符是多余的 – Bharat 2017-09-22 09:30:00