18
ジェネリックを理解してください。私はそうのような内部クラスなどの2つの列挙型を持っていると言う。その代わり、両方の列挙型は、インターフェイスを実装し、二度同じメソッドを実装する必要があるのJava:列挙型の汎用メソッド
public class FoodConstants{
public static enum Vegetable {
POTATO,BROCCOLI,SQUASH,CARROT;
}
public static enum Fruit {
APPLE,MANGO,BANANA,GUAVA;
}
}
、私が何かを外部クラスのメソッドを持っていると思いますlike:
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
感謝を。 -Alex
Oh、clazz.getEnumConstants()は、EnumSet.allOf(clazz)の代わりに機能します。おそらくEnumSet.allOfがおそらくそれに関して実装されていることを考えると、多分もっと効率的ですが、そうでないかもしれません。 –
@SebastianRedl、Odd。私はそれが1.5で利用できなかったと思ったが、それは明らかにそれである。 –
@SebastianRedl: '.getEnumConstants()'は配列の内部配列のコピーを作成しなければならないので、 'EnumSet.allOf()'は '.getEnumConstants()'よりも効率的です。 'EnumSet'は内部実装の詳細を使用して内部配列を直接反復することができますが、配列が変更されるのを防ぐ方法はありません)。 – newacct