Guava SetMultimap不可序列化(由于不可序列化的WrappedSet)

时间:2011-12-13 11:28:02

标签: java guava

我经常使用java序列化,这对于存储完整的对象层次结构非常有用。

尝试序列化SetMultimap时,我得到一个例外,说明AbstractMultimap.WrappedSet不可序列化。

番石榴用户如何解决此问题?

提前致谢,

2 个答案:

答案 0 :(得分:7)

多图的元素的视图(例如从get方法返回的集合,asMap视图等)是故意不可序列化的。但是,由于这种情况,SetMultimap实现不可序列化是不正确的。 Guava提供的SetMultimap的所有实现实际上都是可序列化的...它只是它们的部分视图集合而不是。

如果您需要序列化其中一个集合,则应将其明确复制到普通集合中:

Set<Foo> foo = Sets.newHashSet(multimap.get(someKey));

答案 1 :(得分:0)

修改因此,查看AbstractMultimap的来源,返回的MapAsMapSortedAsMap,两者都不是序列化。我建议您创建一个新的HashMap并使用传递putAll结果的Multimap.asMap()方法。 HashMap可序列化。

HashMap myMap = new HashMap();
myMap.putAll(myMultimap.asMap());