generic Enum.valueOf方法:参数中的枚举类并返回枚举项

时间:2014-10-14 09:25:10

标签: java enums

我想在参数中传递的任何Enum类上创建一个实现valueOf的方法(并且还包含一些专门的错误/缺失名称代码)。 基本上,我有几个Enum,如:

enum Enum1{ A, B, C }
enum Enum2{ D, E, F }

我想要一个包裹valueOf的方法。我找不到直接在参数中传递Enum类的方法,我可以在其中调用valueOf。以下是我提出的建议:

private static Enum getEnum(Class<Enum> E, String name){
    for(Enum e: E.getEnumConstants())
        if(e.name().equals(name)){
            return e;
        }
    return null;
}

我想跟其致电:getEnum(Enum1,"A")。但它不喜欢它:

java: cannot find symbol
  symbol:   variable Enum1
  location: class Main

2 个答案:

答案 0 :(得分:6)

为什么要实现自己的,当你可以使用Java自己的实现时呢?

 YourEnum yourEnum = Enum.valueOf(YourEnum.class, value);

http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#valueOf(java.lang.Class,%20java.lang.String)

然后你的方法变成:

private static <E extends Enum<E>> E getEnum(Class<E> enumClass, String name){
    try {
        return Enum.valueOf(enumClass, name);
    } catch(IllegalArgumentException e) {
        return null;
    }
}

你可以用:

来调用它
getEnum(Enum1.class, "A")

答案 1 :(得分:4)

对于传球课程,您应该使用class

getEnum(Enum1.class,"A")

然后将方法签名更新为

private static Enum getEnum(Class<? extends Enum> E, String name){
    ...
}