Java 如何按类将字符串值强制转换为枚举值?
我有以下课程:Java 如何按类将字符串值强制转换为枚举值?,java,reflection,enums,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
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
}
}
公共类枚举容器{
私有类;
//准备
公共枚举容器(类clazz){
this.enumClass=clazz;
}
公共布尔tryCast(字符串值){
//在这里,我应该尝试将字符串强制转换为Enum by enumClass字段
//如果强制转换成功,则返回true
//否则就错了
}
}
在Java中甚至可以执行这种强制转换吗 这实际上是一种痛苦,因为
Enum
的声明方式。您将无法使用类
(例如类
)进行调用。要做到这一点而不进行未经检查的铸造,唯一的方法是:
但是,你知道,有些人会抱怨,因为这是一种原始类型getEnumConstants
可能会更好,因为这样您就不会对此类事情使用异常
此外,由于您有一个
类
,因此可能需要执行如下检查
if( !Enum.class.isAssignableFrom(enumClass) )
return false;
或者在构造函数中抛出异常。Yes;这是
.valueOf()
@VinceEmigh,因为我使用的是hibernate,为了简化一些映射,我需要使用@Type
注释,它引用必须包含类字段的类型。从网页上我只能获取一个字符串值。@fge你不能提供完整的答案吗?@fge我应该执行什么对象method.invoke(obj,args)
call on?这不是强制转换。别再说铸造了。嗯,不加检查的铸造总是不是一个好主意。。。因为我不知道它在内部是如何工作的,所以我宁愿不使用你最后的方法。@user3663882,那么就不要了。我是发牢骚的人之一,所以如果你不发牢骚,我也没关系
try {
Enum.valueOf( (Class) enumClass, value );
return true;
} catch(IllegalArgumentException e) {
return false;
}
if( !Enum.class.isAssignableFrom(enumClass) )
return false;