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

发布于 2024-12-20 20:54:37 字数 337 浏览 2 评论 0原文

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

当尝试序列化 SetMultimap 时,我收到一个异常,说 AbstractMultimap.WrappedSet 不可序列化。

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

提前致谢,

I'm often using java serialization, which is very usefull to store a complete object hierarchy.

When trying to serialize a SetMultimap, I got an exception saying that that AbstractMultimap.WrappedSet is not serializable.

How do guava users workaround with this problem?

Thanks in advance,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

擦肩而过的背影 2024-12-27 20:54:37

multimap 元素的视图(例如从 get 方法返回的集合、asMap 视图等)故意不可序列化。但是,SetMultimap 实现因此而无法序列化是不正确的。 Guava 提供的所有 SetMultimap 实现实际上都是可序列化的……只是它们的部分视图集合不是可序列化的。

如果您需要序列化这些集合之一,则应将其显式复制到普通集合:

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

The views of elements of a multimap (such as the collections returned from get methods, the asMap view, etc.) are intentionally not serializable. However, it isn't true that a SetMultimap implementation would not be serializable because of that. All implementations of SetMultimap that Guava provides are in fact serializable... it's just the partial view collections for them that are not.

If you need to serialize one of these collections, you should explicitly copy it to a normal collection:

Set<Foo> foo = Sets.newHashSet(multimap.get(someKey));
¢蛋碎的人ぎ生 2024-12-27 20:54:37

Edit 所以查看AbstractMultimap的源码,返回的Map是一个AsMap或者SortedAsMap,两者都不可序列化。我建议创建一个新的 HashMap 并使用 putAll 方法传入 Multimap.asMap() 结果。 HashMap 是可序列化的。

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

Edit So looking at the source of AbstractMultimap, the Map that is returned is an AsMap or SortedAsMap, neither of which are serializable. I would suggest creating a new HashMap and use the putAll method passing in the Multimap.asMap() result. HashMap is serializable.

HashMap myMap = new HashMap();
myMap.putAll(myMultimap.asMap());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文