2014-09-13 80 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