私は、特定の型をまとめて保持する列挙型と、各型の特定のフィールドを持っています。いくつかの繰り返し値を持つ列挙型?
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つの値type
とdefinition
の両方が必要です。
私は2つのアプローチを考えている:
のどちらかがdefinition
という名前の全体の列挙のための新しいフィールドを追加するために、これはC.
除き、他のタイプのヌル値につながるか、新しい列挙型を作成しますCのサブタイプの場合は、getName()
ではなくCのサブタイプ名を取得するためにenumを使用します。
これを可能な限り最良の方法で達成するにはどうすればよいですか?
何か助けていただければ幸いです。
タイプフィールドを定義フィールドに置き換えて、A1、A2、G7、Z9を持っている可能性があるため、Aに100、Bに200などを持たせることをお勧めします。広く使用されているライブラリをアップグレードする場合を除いて、タイプを完全に置き換えることは常に優れています。 – glee8e
メソッドの名前を「Types getName(int type)」に変更することをお勧めします。 javadocを追加して、メソッドが何をするべきか理解できるようにしてください。 それは 'Types getByTypeKey(int typeKey)'のようなものですか? –
@TobiasOtto:はい、それは 'getByTypeKey(int typeKey)'です。 1 - > A型、2 - > B型、3 - > C型 –