Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型Enum.valueOf方法:参数中的枚举类并返回枚举项_Java_Enums - Fatal编程技术网

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

Java 泛型Enum.valueOf方法:参数中的枚举类并返回枚举项,java,enums,Java,Enums,我想创建一个方法,在传入参数的任何枚举类上实现valueOf(并包装一些专门的错误/缺少的名称代码)。 基本上,我有几个枚举,例如: enum Enum1{ A, B, C } enum Enum2{ D, E, F } 我想要一个方法,它能将valueOf包装起来。我找不到直接在参数中传递枚举类的方法,我可以对该参数调用valueOf。以下是我的想法: private static Enum getEnum(Class<Enum> E, String name){ for

我想创建一个方法,在传入参数的任何枚举类上实现
valueOf
(并包装一些专门的错误/缺少的名称代码)。 基本上,我有几个枚举,例如:

enum Enum1{ A, B, C }
enum Enum2{ D, E, F }
我想要一个方法,它能将
valueOf
包装起来。我找不到直接在参数中传递枚举类的方法,我可以对该参数调用
valueOf
。以下是我的想法:

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

对于pass类,您应该使用
class

getEnum(Enum1.class,"A")
然后将方法签名更新为

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

private static Enum getEnum(Class既然可以使用Java自己的实现,为什么还要实现自己的呢

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

然后,您的方法变为:

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

有没有一个方法可以用来-
Enum.valueOf(Enum1.class,value);
?它不对应于
getEnum
的签名,它接受一个
class
。如果我为
class
更改它,那么
E.getenumctants
返回
对象
…将方法签名更新到
私有静态Enum getEnum(ClassOK!然后我可以使用@Zhuinden
Enum.valueOf
也:-)我最终选择了Zhuinden答案,因为它返回正确的枚举类型,而不仅仅是一个枚举。该方法似乎很有用,但我仍然遇到了
getEnum
签名的问题(我想把
valueOf
调用包装到它里面,在它周围添加更多的代码。基于
valueOf
签名,
public static T valueOf(Class enumType,String name)
,您需要
private static E getEnum(Class clazz,String name)
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")