簡體   English   中英

Java可擴展枚舉

[英]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:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570766

要回顧Java之前的5天,請參閱Josh Bloch撰寫的第21章第5章,有效的Java 他談論通過添加值來擴展“枚舉”,但是也許您可以使用某些技術來添加新方法?

用類似於Josh Bloch的Effective Java中定義的機制手工制作枚舉。

我要補充一點,如果您需要“擴展”枚舉,那么枚舉可能不是您所追求的構造。 它們是靜態常量恕我直言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM