如何按类将String值转换为Enum值?

时间:2015-04-22 08:26:09

标签: 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 cast the String to the Enum by enumClass field

        //return true if cast was successfull
        //false otherwise
    }
}

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

1 个答案:

答案 0 :(得分:3)

由于声明了Enum的方式,它实际上是一种痛苦。您无法使用Class<?>(例如Class<? extends Enum<?>>)来呼叫valueOf。没有未经检查的强制转换的唯一方法是通过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;

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