如何通过 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;
或者在构造函数中抛出异常
我有以下 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;
或者在构造函数中抛出异常