首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >db4o enumset异常

db4o enumset异常
EN

Stack Overflow用户
提问于 2012-12-24 04:48:52
回答 1查看 293关注 0票数 1

我使用的是具有透明激活/持久性的db4o 8.0。我有一个包含EnumSet (和其他东西)的类。我实例化,在set和存储中添加一个枚举值。当我在DB中搜索时,获取它并试图激活对象--我得到了这个异常:

代码语言:javascript
复制
Exception in thread "main" java.lang.ClassCastException: class Resources.Enums$fooEnum_t != null
    at java.util.EnumSet.typeCheck(EnumSet.java:380)
    at java.util.RegularEnumSet.add(RegularEnumSet.java:160)
    at java.util.RegularEnumSet.add(RegularEnumSet.java:36)
    at com.db4o.typehandlers.CollectionTypeHandler.addToCollection(CollectionTypeHandler.java:120)
    at com.db4o.typehandlers.CollectionTypeHandler.activate(CollectionTypeHandler.java:45)
    at com.db4o.internal.Handlers4.activate(Handlers4.java:300)
...
...

要将enumSet存储到db4o中,我使用:

代码语言:javascript
复制
config.common().objectClass(EnumSet.class).translate(new com.db4o.config.TSerializable());

我不知道是什么问题。有什么想法吗?

编辑:

我不知道该在哪里问关于db4o的问题。因此,社区似乎对db4o并不十分活跃。这是因为db4o不是很受欢迎,还是有另一个“支持”的地方?

编辑2:

我发现在versant的论坛上发布的帖子可能是相关的,但没有帮助:http://community.versant.com/Forums/tabid/98/aft/1046/Default.aspx#3370

我还认出了一件事。不支持java.util.EnumMap和java.util.EnumSet,db4o将抛出一个异常,因为没有默认构造函数,所有具有空args的构造函数都会为这些类失败。当然,Db4o.configure().objectClass("java.util.EnumMap").translate(new com.db4o.config.TSerializable()将解决这个问题。我认为应该支持标准的集合框架。

EN

回答 1

Stack Overflow用户

发布于 2012-12-24 10:25:29

我甚至会小心在db4o中使用枚举。db4o存储枚举的方式是极其危险的。如果您重构,更改枚举,它可能会导致超级奇怪的行为,错误,当您将枚举存储在db4o中。到目前为止,枚举上的开关语句可能跳到错误的位置。

简短的理由: db4o像存储对象实例一样存储枚举,并在加载时为每个反射设置枚举值,这可能会导致非常奇怪的错误,因为枚举不应该更改。

我将避免存储(Java)-enums,因此也避免使用枚举集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14017198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档