我正在使用具有透明激活/持久性的 db4o 8.0 ......我有一个包含 EnumSet (和其他东西)的类。我实例化,将枚举值添加到集合和存储中。当我在 DB 中搜索时,获取它并尝试激活我得到这个异常的对象:
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 中,我使用:
config.common().objectClass(EnumSet.class).translate(new com.db4o.config.TSerializable());
我无法弄清楚问题是什么。有任何想法吗?
编辑:
我不知道在哪里可以询问有关 db4o 的问题。SO 社区似乎对 db4o 不太活跃。这是因为 db4o 不是很受欢迎还是有其他地方可以“支持”?
编辑 2:
我在 versant 的论坛上发现该帖子可能相关但无济于事:http:
//community.versant.com/Forums/tabid/98/aft/1046/Default.aspx#3370
我又认出了一件事。没有对 java.util.EnumMap 和 java.util.EnumSet 的内置支持,db4o 将抛出异常,因为没有默认构造函数,并且所有带空参数的构造函数对于这些类都将失败。Db4o.configure().objectClass("java.util.EnumMap").translate(new com.db4o.config.TSerializable()) 当然会解决这个问题。我认为应该支持标准的集合框架。