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!然后我可以使用@ZhuindenEnum.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")