2016-12-29 23 views
0

私は、特定の型をまとめて保持する列挙型と、各型の特定のフィールドを持っています。いくつかの繰り返し値を持つ列挙型?

public enum Types { 

A (1, A.class, "stringA"), 
B (2, B.class, "stringB"), 
C (3, C.class, "stringC"), 

C1(3, C1.class, "stringC"), 
C2(3, C2.class, "stringC"), 
C3(3, C3.class, "stringC"), 
. 
. 
D (4, D.class, "stringD"), 
E (5, E.class, "stringE"), 
F (6, F.class, "stringF"), 
. 
. 
. 
. 
private int type; 
private Class<?> className; 
private String longname; 

private Types(int type, Class<?> className, String longName) 
    { 
     this.type = type; 
     this.className = className; 
     this.longName = longName; 
    } 

//..... getter, setters 
// returns name from type passed 
    public static Types getName(int type) { 

     for (Types e : Types.values()) { 
      if (type == e.type) 
       return e; 
     } 

     return null; 
    } 
} 

タイプのキーが重複しない限り、すべてが正常だった。したがって、TypeCはサブタイプC1, C2..を持ち、3と同じタイプの値を持ちます。

これは、enumのvaluesを反復することによって型を与えるメソッドgetName()です。

C1, C2, C3...今同じタイプの値3.

へのすべてのマップは、Cタイプを区別するために、私はCのサブタイプのために別の変数名definitionを持っています。だから、definitionの値は次のとおりです。

C1 100 
C2 101 
C3 101 

だから、タイプCのための列挙型のユニークな要素を取得するために、私は、2つの値typedefinitionの両方が必要です。

私は2つのアプローチを考えている:

のどちらかがdefinitionという名前の全体の列挙のための新しいフィールドを追加するために、これはC.

除き、他のタイプのヌル値につながるか、新しい列挙型を作成しますCのサブタイプの場合は、getName()ではなくCのサブタイプ名を取得するためにenumを使用します。

これを可能な限り最良の方法で達成するにはどうすればよいですか?

何か助けていただければ幸いです。

+0

タイプフィールドを定義フィールドに置き換えて、A1、A2、G7、Z9を持っている可能性があるため、Aに100、Bに200などを持たせることをお勧めします。広く使用されているライブラリをアップグレードする場合を除いて、タイプを完全に置き換えることは常に優れています。 – glee8e

+0

メソッドの名前を「Types getName(int type)」に変更することをお勧めします。 javadocを追加して、メソッドが何をするべきか理解できるようにしてください。 それは 'Types getByTypeKey(int typeKey)'のようなものですか? –

+0

@TobiasOtto:はい、それは 'getByTypeKey(int typeKey)'です。 1 - > A型、2 - > B型、3 - > C型 –

答えて

0

これは、Cx列挙型が実際にA,Bなどと同じクラスかどうかによって異なります。これはドメインモデルを知らなくても解決できません。

だけで構文から、私はおそらくdefinitionが主キーであること、definitiontypeフィールドを保持するためにTypesを作ると思います。次に、両方がdefinitiontypeの2つのコンストラクタと、definitiontypeにはdefinitionと同じ値が割り当てられます)という2つのコンストラクタがあります。これは基本的に2つのフィールドで提案されたものですが、nullではなくCxの代わりにdefinitiontypeと等しいとみなします。

+0

A、B、C、Dは異なる型であり、C1、C2 ...は型Cである。 'Cx'をタイプするので、typeは定義と同じ値を割り当てることができません。そして、2つのコンストラクタがどのように動作するかの例を挙げることができますか? –

関連する問題