私は次の列挙型を持っています:
public enum MyEnum{
A(10, "First"), //
B(20, "Second"), //
C(35, "Other options");
private Integer code;
private String description;
private MyEnum(Integer code, String description) {
this.code = code;
this.description = description;
}
public Integer getCode() {
return code;
}
public String getDescription() {
return description;
}
public static MyEnum getValueOf(Integer code) {
for (MyEnum e : MyEnum.values()) {
if (e.getCode().equals(code)) {
return e;
}
}
throw new IllegalArgumentException("No enum const " + MyEnum.class.getName() + " for code \'" + code
+ "\'");
}
}
これは問題なく動作します。-getValueOf
メソッドが存在するのは、外部パートナーと通信するときに、マップするコード(彼らが選択した)のみを取得するためです。GUIで意味のあるフレーズを表示する必要があるため、説明が必要です。
しかし、私は今、いくつかの同様の列挙型クラスを持っています。すべて独自のコードと説明があり、同じルックアップ機能が必要です。-methodを汎用にしたかったgetValueOf
ので、基本的に同じメソッドで30以上の異なる列挙型をサポートする必要はありません。
これを解決するために、このメソッドを定義し、いくつかの共通論理を実装するための抽象クラスを作成したかったのですが、拡張できないため、これは不可能ですEnum
。
次に、次のメソッドを使用してUtilityクラスを作成しようとしました。
public static <T extends Enum<T>> T getValueOf(Enum<T> type, Integer code) {...}
しかし、列挙型を使用したジェネリックは混乱を招き、これを機能させる方法がわかりません。
基本的に私が知りたいのは、列挙型に共通の効用を定義するための良いアプローチは何ですか?