我试图通过解析xml文档以编程方式设置Field
的值来查找值。
我的结构有点像这样:
value = parseXml();
field.set(myObject, value);
private Object parseXml()
{
String value = getValueFromXmlNode();
if (type.isInstance(Enum.class))
{
return Enum.valueOf(((Class<Enum>) type), value);
}
else
{
return value;
}
}
这适用于大多数情况。但是,如果字段需要Enum
,则不再有效。因为我将我的方法的返回类型设置为Object
,所以enum会被转换为String。然后field.set()
调用失败。
让方法返回可能是Enum
的泛型类型的正确方法是什么?
对于原始类型,有autobox和unbox的Object包装器,Enum
有类似的东西吗?
答案 0 :(得分:3)
因为我将我的方法的返回类型设置为Object,所以enum会被转换为String。
不,不。
对于原始类型,有autobox和unbox的Object包装器,Enum有类似的东西吗?
枚举值是对象。您已经可以将枚举值放在对象变量中。
我认为问题在于这一行:
if (type.isInstance(Enum.class))
应该是:
if (type.isEnum())
isInstance
调用无法执行您想要的操作,因为它询问类对象Enum.class
是否为instanceof
type
类。
然后,因为if
检查不起作用,它总是选择按原样返回String value
的第二个分支,这就是为什么看起来enum本身被强制转换为字符串。
答案 1 :(得分:-1)
为什么使用Enum.valueOf(Class, String)
代替Enum.valueOf(String)
?您知道定义Enum的String的值。
尝试改为使用Enum.valueOf(value)
。
从Enum.valueOf(Class,String)的javadoc:“注意,对于特定的枚举类型T,可以使用该枚举上隐式声明的公共静态T valueOf(String)方法来代替此方法来映射相应枚举常量的名称。“