Java:Enums的通用方法
帮我理解generics。 假设我有两个枚举作为内部类,如下所示:
public class FoodConstants{ public static enum Vegetable { POTATO,BROCCOLI,SQUASH,CARROT; } public static enum Fruit { APPLE,MANGO,BANANA,GUAVA; } }
而不是让两个枚举实现一个接口,并且必须两次实现相同的方法,我希望在外部类中有一个方法,它可以执行以下操作:
public 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 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 > String getEnumString(Class clazz, String s){ for(E en : EnumSet.allOf(clazz)){ if(en.name().equalsIgnoreCase(s)){ return en.name(); } } return null; }
原版有一些问题:
- 它接受枚举的实例,而不是代表您的问题建议您要使用的枚举的类。
- 未使用类型参数。
- 它返回输入而不是实例名称。 也许返回实例会更有用 – 一个不区分大小写的
Enum.valueOf(String)
版本。 - 它在实例上调用静态方法,因此您可以进行迭代。
EnumSet
为您提供所有反光的东西。