所有枚举的java通用方法!枚举类型问题

所有枚举的java通用方法!枚举类型问题,java,Java,我想为我的所有枚举实现此通用方法,但我无法获取枚举类型??? public static <T extends Enum> T getValue(String value) throws ValidationException { try { Class<T> enumType = null; //i can't get it ???? return (T) T.valueOf(enumType, value); } cat

我想为我的所有枚举实现此通用方法,但我无法获取枚举类型???

public static <T extends Enum> T getValue(String value) throws ValidationException {
    try {
        Class<T> enumType = null; //i can't get it ????
        return (T) T.valueOf(enumType, value);
    } catch (Exception e) {
        throw new ValidationException(ERROR_CODE.ERR_INVALID_PARAM);
    }
}
publicstatict getValue(字符串值)抛出ValidationException{
试一试{
类enumType=null;//我无法获取它????
返回(T)T.valueOf(枚举类型,值);
}捕获(例外e){
抛出新的ValidationException(错误\代码。错误\无效\参数);
}
}

Java的泛型系统使用一种称为“类型擦除”的方法。这意味着类型参数,例如
T
,只存在于源代码中,而不存在于实际编译的程序中。因此,无法知道调用该方法时
T
表示什么类型,因为
T
的整个概念在运行时都不存在

不幸的是,该方法获取
实例的唯一方法是实际将其作为参数传递:

MyEnum e=getValue(MyEnum.class,“我的值”);
拥有
实例后,可以对其调用
getEnumConstants()
方法以获取所有枚举值的数组。然后,您可以在其中搜索具有所需名称的值:

T[]constants=enumType.getEnumConstants();
for(tc:常数){
如果(c.name().equals(value)){
返回c;
}
}
抛出新的IllegalArgumentException(“无此值:”+value);

不,你不能。您必须接受一个额外的
Class
参数。好的,谢谢,我会像参数一样添加它。@Sweeper,但您也可以直接调用
Enum.valueOf(clazz,value)
。顺便说一句: