我有以下课程:
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中甚至可以执行这样的转换吗?
答案 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;
或在构造函数中抛出异常。