Java 如何按类将字符串值强制转换为枚举值?

Java 如何按类将字符串值强制转换为枚举值?,java,reflection,enums,Java,Reflection,Enums,我有以下课程: public class EnumContainer{ private Class<?> enumClass; //GET, SET public EnumContainer(Class<?> clazz){ this.enumClass = clazz; } public boolean tryCast(String value){ //Here I should try to

我有以下课程:

public class EnumContainer{

    private Class<?> enumClass;
    //GET, SET

    public EnumContainer(Class<?> clazz){
        this.enumClass = clazz;
    }

    public boolean tryCast(String value){
        //Here I should try to cast the String to the Enum by enumClass field

        //return true if cast was successfull
        //false otherwise
    }
}
公共类枚举容器{
私有类;
//准备
公共枚举容器(类clazz){
this.enumClass=clazz;
}
公共布尔tryCast(字符串值){
//在这里,我应该尝试将字符串强制转换为Enum by enumClass字段
//如果强制转换成功,则返回true
//否则就错了
}
}

在Java中甚至可以执行这种强制转换吗

这实际上是一种痛苦,因为
Enum
的声明方式。您将无法使用
(例如
)进行调用。要做到这一点而不进行未经检查的铸造,唯一的方法是:

但是,你知道,有些人会抱怨,因为这是一种原始类型
getEnumConstants
可能会更好,因为这样您就不会对此类事情使用异常


此外,由于您有一个
,因此可能需要执行如下检查

if( !Enum.class.isAssignableFrom(enumClass) )
    return false;

或者在构造函数中抛出异常。

Yes;这是
.valueOf()
@VinceEmigh,因为我使用的是hibernate,为了简化一些映射,我需要使用
@Type
注释,它引用必须包含类字段的类型。从网页上我只能获取一个字符串值。@fge你不能提供完整的答案吗?@fge我应该执行什么对象
method.invoke(obj,args)
call on?这不是强制转换。别再说铸造了。嗯,不加检查的铸造总是不是一个好主意。。。因为我不知道它在内部是如何工作的,所以我宁愿不使用你最后的方法。@user3663882,那么就不要了。我是发牢骚的人之一,所以如果你不发牢骚,我也没关系
try {
    Enum.valueOf( (Class) enumClass, value );
    return true;
} catch(IllegalArgumentException e) {
    return false;
}
if( !Enum.class.isAssignableFrom(enumClass) )
    return false;