如何通过 Class 将字符串值转换为枚举值?

How to cast a String value to an Enum value by Class?

我有以下 class:

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
    }
}

在 Java 中甚至可以执行这样的转换吗?

由于 Enum 的声明方式,这实际上有点痛苦。你将无法调用 valueOf with a Class<?> (nor e.g. a Class<? extends Enum<?>>). The only way to do it without unchecked casting is to go through getEnumConstants:

public boolean tryCast(String value){
    for(Object o : enumClass.getEnumConstants()) {
        Enum<?> e = (Enum<?>) o;
        if(e.name().equals(value))
            return true;
    }
    return false;
}

如果您不关心未经检查的转换,您可以这样做:

try {
    Enum.valueOf( (Class) enumClass, value );
    return true;
} catch(IllegalArgumentException e) {
    return false;
}

但是,您知道,有些人会抱怨,因为它是原始类型。 getEnumConstants 无论如何都可能更好,因为你不会对这种事情使用例外。


此外,由于您有一个 Class<?>,您可能希望执行

这样的检查
if( !Enum.class.isAssignableFrom(enumClass) )
    return false;

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