7

拡張可能な列挙型を作成する方法はありますか?列挙に常に使用できるようにしたいメソッドがいくつかあります。たとえば、データベースフィールドに列挙型を使用します。データベースに実際のフィールド名を含めます。

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

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

            public String getFieldName()
                {
                    return FieldName;
                }
        } 
4

6 に答える 6

16

すべての列挙型は暗黙的に拡張されjava.lang.Enumます。Javaは多重継承をサポートしていないため、列挙型は他に何も拡張できません。

于 2008-10-21T13:35:42.263 に答える
10

私の理解が正しければ、あなたがやりたいことは次のようなものです。

public abstract class DatabaseField {
    private String fieldName;

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

    public String getFieldName() {
        return fieldName;
    }
}

次に、列挙型を定義してこのクラスを拡張します。ただし、残念ながら、列挙型はクラスを拡張できませんが、インターフェースを実装することはできます。そのため、現時点でできる最善の方法は、getFieldName() メソッドを含むインターフェースを定義し、すべての列挙型にこのインターフェースを実装させることです。

ただし、これは、すべての列挙型でこのメソッド (およびその他のメソッド) の実装を複製する必要があることを意味します。この重複を最小限に抑える方法について、この質問にはいくつかの提案があります。

于 2008-10-21T13:38:54.393 に答える
6

Enum はインターフェースを実装できますが、コンパイル時に java.lang.Enum に変換されるため、拡張できません。

于 2008-10-21T13:40:01.287 に答える
6

抽象列挙型は潜在的に非常に便利です (そして現在は許可されていません)。しかし、Sun の誰かにそれを追加するよう働きかけたい場合は、提案とプロトタイプが存在します。

http://freddy33.blogspot.com/2007/11/abstract-enum-ricky-carlson-way.html

太陽RFE:

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

于 2008-10-21T19:59:23.517 に答える
0

Java の前の 5 日間にさかのぼるには、Item 21, Chapter 5,Effective Java by Josh Bloch を参照してください。彼は、値を追加して「列挙型」を拡張することについて話していますが、新しいメソッドを追加するためにいくつかの手法を使用できるでしょうか?

于 2008-10-21T14:22:55.973 に答える
0

Josh Bloch の「Effective Java」で定義されているものと同様のメカニズムで enum を手作りします。

列挙型を「拡張」する必要がある場合、おそらく列挙型はあなたが求めている構造ではないことを付け加えます。それらは静的定数IMHOであることを意図しています。

于 2008-10-22T03:33:27.250 に答える