Android的Enums的序列化问题
作者:互联网
我正在使用XStream将某些对象序列化为XML,并且遇到枚举问题.尝试序列化对象时遇到的异常:“ ObjectAccessException:无效的最终字段java.lang.Enum.name”.
显然,这是android中的反射API实现的问题:它无法正确处理最终字段.在正式的Sun(Oracle)JDK的以前的实现中实际上存在此问题.
您可以确认/驳斥这是Android的问题吗?您能否建议在这种情况下可以使用的任何其他序列化API?
解决方法:
我能找到解决此问题的唯一方法是为枚举创建AbstractSingleValueConverter,然后向xstream注册.
public class SingleValueEnumConverter extends AbstractSingleValueConverter
{
private final Class enumType;
public SingleValueEnumConverter(Class type)
{
this.enumType = type;
}
public boolean canConvert(Class c)
{
return c.equals(enumType);
}
public Object fromString(String value)
{
return Enum.valueOf(enumType, value);
}
}
采用
XStream xml = new XStream();
xml.registerConverter(new SingleValueEnumConverter([ENUM].class));
标签:xstream,android,enums 来源: https://codeday.me/bug/20191009/1879467.html