[英]Java extendable enumeration
有沒有一種方法可以編寫可以擴展的枚舉。 我有幾種我想始終可以用於枚舉的方法。 例如,我對數據庫字段使用枚舉。 我將實際的字段名稱包括在數據庫中。
public enum ORDERFIELDS
{
OrderID("Order_ID");
private String FieldName;
private ORDERFIELDS(String fname)
{
this.FieldName = fname;
}
public String getFieldName()
{
return FieldName;
}
}
所有枚舉都隱式擴展java.lang.Enum
。 由於Java不支持多重繼承,因此枚舉不能擴展任何其他內容。
如果我理解正確,那么您想做的是這樣的:
public abstract class DatabaseField {
private String fieldName;
private DatabaseField(String fieldName) {
this.fieldName = fieldName;
}
public String getFieldName() {
return fieldName;
}
}
然后定義您的枚舉以擴展此類。 但是,不幸的是,一個枚舉不能擴展一個類,但是可以實現一個接口,因此,目前您能做的最好的事情就是定義一個包含getFieldName()方法的接口,並使所有枚舉都實現此接口。
但是,這意味着您必須在所有枚舉中重復此方法(以及任何其他方法)的實現。 這個問題中有一些建議可以減少這種重復。
枚舉可以實現接口,但不能擴展,因為在編譯時,它們會轉換為java.lang.Enum。
抽象枚舉可能非常有用(當前不允許使用)。 但是,如果您想游說Sun中的某人添加提案和原型,則可以使用該提案和原型:
http://freddy33.blogspot.com/2007/11/abstract-enum-ricky-carlson-way.html
Sun RFE:
要回顧Java之前的5天,請參閱Josh Bloch撰寫的第21章第5章,有效的Java 。 他談論通過添加值來擴展“枚舉”,但是也許您可以使用某些技術來添加新方法?
用類似於Josh Bloch的Effective Java中定義的機制手工制作枚舉。
我要補充一點,如果您需要“擴展”枚舉,那么枚舉可能不是您所追求的構造。 它們是靜態常量恕我直言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.