ジェネリック医薬品について教えてください。たとえば、次のような内部クラスとして2つの列挙型があるとします。
public class FoodConstants {
public static enum Vegetable {
POTATO,BROCCOLI,SQUASH,CARROT;
}
public static enum Fruit {
Apple,MANGO,BANANA,GUAVA;
}
}
両方の列挙型でインターフェイスを実装し、同じメソッドを2回実装する必要があるのではなく、外部クラスに次のようなメソッドを実装したいと思います。
public <e> String getEnumString<Enum<?> e, String s) {
for(Enum en: e.values()) {
if(en.name().equalsIgnoreCase(s)) {
return s;
}
}
return null;
}
ただし、このメソッドはコンパイルされません。私がやろうとしているのは、文字列値が列挙値の名前であるかどうか、それが野菜か果物かどうかに関係なく、すべての列挙型で見つけることです。これが実際に冗長な方法であるかどうかに関係なく、私が書き直そうとしている方法の何が問題になっていますか?
基本的に私はこれをしたいと思います:
public class FoodConstants {
public static enum Vegetable {
POTATO,BROCCOLI,SQUASH,CARROT;
}
public static enum Fruit {
Apple,MANGO,BANANA,GUAVA;
}
public <e> String getEnumString<Enum<?> e, String s) {
for(Enum en: e.values()) {
if(en.name().equalsIgnoreCase(s)) {
return s;
}
}
return null;
}
} //end of code
_public static <E extends Enum<E>>
String getEnumString(Class<E> clazz, String s){
for(E en : EnumSet.allOf(clazz)){
if(en.name().equalsIgnoreCase(s)){
return en.name();
}
}
return null;
}
_
オリジナルにはいくつかの問題があります:
Enum.valueOf(String)
の大文字小文字を区別しないバージョン。EnumSet
はすべての反射的なことを行います。