Helfen Sie mir, Generika zu verstehen. Sagen wir, ich habe zwei Aufzählungen als innere Klassen wie folgt:Java: Generische Methode für Enums
public class FoodConstants{
public static enum Vegetable {
POTATO,BROCCOLI,SQUASH,CARROT;
}
public static enum Fruit {
APPLE,MANGO,BANANA,GUAVA;
}
}
Statt beide Aufzählungen eine Schnittstelle mit implementieren und haben die gleiche Methode zweimal zu implementieren, würde Ich mag eine Methode in der äußeren Klasse haben, der etwas tut, wie:
public <e> String getEnumString<Enum<?> e, String s){
for(Enum en: e.values()){
if(en.name().equalsIgnoreCase(s)){
return s;
}
}
return null;
}
Allerdings kompiliert diese Methode nicht. Was ich versuche zu tun, ist herauszufinden, ob ein String-Wert der Name eines aufgezählten Wertes ist, in JEDER enum, ob es Gemüse, Obst, was nicht ist. Unabhängig davon, ob dies tatsächlich eine redundante Methode ist, was ist falsch an der, die ich versuche (wieder) zu schreiben?
Grundsätzlich würde Ich mag, dies zu tun: für Ihre Hilfe
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
Dank. -Alex
Oh, und clazz.getEnumConstants() würde anstelle von EnumSet.allOf (clazz) arbeiten. Es ist wahrscheinlich etwas effizienter, wenn man bedenkt, dass EnumSet.allOf wahrscheinlich in Bezug darauf implementiert wurde, aber dann, vielleicht nicht. –
@SebastianRedl, ungerade. Ich dachte, das war nicht in 1.5, aber anscheinend ist es. –
@SebastianRedl: Tatsächlich ist 'EnumSet.allOf()' effizienter als '.getEnumConstants()', weil '.getEnumConstants()' eine Kopie des internen Arrays von Konstanten erstellen muss (da es ein Array zurückgibt und dort ist nicht in der Lage zu verhindern, dass ein Array geändert wird), während "EnumSet" interne Implementierungsdetails verwenden kann, um direkt über das interne Array zu iterieren. – newacct