目前,我正在实施Multimap类,以允许使用Multisets进行重复。特别是,我正在研究boolean putAll(Multimap<? extends K, ? extends V> multimap)
方法。
我想这样做:
Map<K, Collection<V>> map = ((Multimap<K, V>)multimap).asMap();
asMap()
通常会返回Map<? extends K, Collection<? extends V>>
。
这是否有效(如果我没有添加到地图中,则不会抛出错误)?如果没有,我该如何解决这个问题?
答案 0 :(得分:2)
其他人已经涵盖了您的具体问题,但我认为您提出了错误的问题(并试图做一些您不应该做的事情)。
首先,我想问一下你为什么要自己实施Multimap
。你似乎可以避免这样做。
其次,您尝试使用map.putAll(Map)
添加传递到asMap()
实施的Multimap
的{{1}}视图。这几乎肯定是错误的,会违反Multimap.putAll(Multimap)
的规范。 Multimap.putAll
视图中的Collection
值是关联键值的实时视图,当多图更改时,其内容将更改。如果您将这些集合直接添加到asMap()
,您可能已支持Map
实施,那么如果之后修改了其他Multimap
,则Multimap
将最终更改。不仅如此,如果您的Multimap
已经拥有该密钥的值,会发生什么?