Android 中枚举的序列化问题
我正在使用 XStream 将一些对象序列化为 XML,但遇到了枚举问题。当我尝试序列化对象时出现异常:“ObjectAccessException:无效的最终字段java.lang.Enum.name”。
显然,这是 android 中反射 API 实现的一个问题:它没有正确处理最终字段。这个问题实际上存在于Sun(Oracle)官方JDK的过去实现中。
你能确认/反驳这是Android的问题吗?您能否建议在这种情况下可以使用任何其他序列化 API?
I'm using XStream to serialize some objects to XML, and am facing a problem with Enums. The exception I get when I try to serialize the object: "ObjectAccessException: invalid final field java.lang.Enum.name".
Apparently, this is a problem with the reflection API implementation in android: It doesn't treat final fields correctly. This problem actually existed in past implementations of the official Sun (Oracle) JDK.
Can you confirm/refute this is the problem with Android? Can you suggest any other serialization API that could be used in this situation?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我能找到解决这个问题的唯一方法是为枚举创建一个 AbstractSingleValueConverter,然后将其注册到 xstream。
使用
The only way i could find to get around this is to create a AbstractSingleValueConverter for enums and then register it with xstream.
Use
您只需从 xstream 包中注册 EnumConverter() 即可。
You can just register EnumConverter() from xstream package.
Pintac 的答案仍然包含一个错误。根据 Java 规范,它仍然不使用 name() 方法。在 XStream 邮件列表中进行讨论之后,该错误在任何高于 1.3.1 的版本中都得到了修复。请参阅邮件列表中的主题“Enum on Android”。
修复版本:
来自XStream的开发者。
Pintac's answer still contains a bug. It still does not use the name() method, according to Java spec. After a thread at XStream mailing list, the bug was fixed in any release greater 1.3.1. Please see the thread "Enum on Android" at the mailing list.
The fixed version:
It was from the developer of XStream.