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; } 

原版有一些问题:

  1. 它接受枚举的实例,而不是代表您的问题建议您要使用的枚举的类。
  2. 未使用类型参数。
  3. 它返回输入而不是实例名称。 也许返回实例会更有用 – 一个不区分大小写的Enum.valueOf(String)版本。
  4. 它在实例上调用静态方法,因此您可以进行迭代。 EnumSet为您提供所有反光的东西。