其他分享
首页 > 其他分享> > Android的Enums的序列化问题

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