繁体   English   中英

如何通过类将字符串值转换为枚举值? [重复]

[英]How to cast a String value to an Enum value by Class? [duplicate]

这个问题已经在这里有了答案:

我有以下课程:

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的方式,这实际上是一种痛苦。 您将无法使用Class<?>调用valueOf (也不是Class<? extends Enum<?>> )。 进行无限制转换的唯一方法是通过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;

或在构造函数中引发异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM