帮我理解泛型。假设我有两个枚举作为内部类,像这样:
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;
}
然而,这种方法无法编译。我的目的是找出一个字符串值是否为任何枚举类型的名称,无论它是蔬菜、水果或其他东西。
不管这是否是一个多余的方法,我试图(重新)编写的方法有什么问题?
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
EnumSet.allOf()
比.getEnumConstants()
更有效率,因为.getEnumConstants()
必须复制常量的内部数组(因为它返回一个数组,并且没有办法防止数组被修改),而EnumSet
可以使用内部实现细节直接迭代内部数组。 - newacct