2008-10-21 154 views
7

有沒有辦法寫一個可以擴展的枚舉。我有幾種方法,我希望可以隨時獲得我的枚舉。例如,我爲我的數據庫字段使用枚舉。我將實際的字段名稱包含在數據庫中。Java可擴展枚舉

public enum ORDERFIELDS 
     { 
      OrderID("Order_ID"); 
      private String FieldName; 

      private ORDERFIELDS(String fname) 
       { 
        this.FieldName = fname; 
       } 

      public String getFieldName() 
       { 
        return FieldName; 
       } 
     } 

回答

10

如果我理解正確的話,你想要做的是這樣的:

public abstract class DatabaseField { 
    private String fieldName; 

    private DatabaseField(String fieldName) { 
     this.fieldName = fieldName; 
    } 

    public String getFieldName() { 
     return fieldName; 
    } 
} 

然後定義你的枚舉擴展這個類。然而,不幸的是,枚舉不能擴展一個類,但它可以實現一個接口,所以你現在可以做的最好的是定義一個包含getFieldName()方法的接口,並讓所有的枚舉實現這個接口。

但是,這意味着您必須在所有枚舉中重複執行此方法(以及任何其他方法)。在this question中有一些建議可以減少這種重複。

16

所有枚舉都隱式擴展java.lang.Enum。由於Java不支持多重繼承,因此枚舉不能擴展其他任何東西。

6

枚舉可以實現接口,但不能擴展,因爲編譯它們時會轉換爲java.lang.Enum。

+0

我認爲這是最明智的設計在這裏吧?如果一個枚舉實現了正確的接口,那麼你知道它是一個數據庫字段的枚舉。 – 2008-10-21 13:45:30

0

手工工藝類似的機制枚舉在Josh Bloch的Effective Java中定義。

我會補充說,如果您需要「擴展」枚舉,那麼也許枚舉不是您在之後的構造。他們的意思是靜態常量恕我直言。