
[英]How to convert String to enum value when enum type reference is a Class<?>?
[英]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.