如何通过谷歌收藏Multimap之迭代,对象>?
-
20-09-2019 - |
题
使用谷歌集合之前,我有类似下面的代码的东西:
private Set<A> aSet = ...;
private Set<B> bSet = ...;
public Foo getFoo (Map<?, List<Bar>> bars, Set<?> set) {
for (Object item : set) {
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
和我能够使这样的呼叫:
Map<A, List<Bar> aMap = getAMap ();
Foo f1 = getFoo (aMap, aSet);
Map<B, List<Bar> bMap = getBMap ();
Foo f2 = getFoo (bMap, bSet);
现在,用Multimap之,我不能做相同的:
public Foo getFoo (Multimap<?, List<Bar>> bars, Set<?> set) {
for (Object item : set) {
// compile error: get(capture#621 of ?) in Multimap ... cannot be applied to java.lang.Object
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
解决方案
尝试这种情况:
public <T> Foo getFoo (Multimap<T, List<Bar>> bars, Set<T> set) {
for (T item : aSet) {
// compile error: get(capture#621 of ?) in Multimap ... cannot be applied to java.lang.Object
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
编辑:
如果您看到这两个类的Javadoc,你会发现,对于地图的Javadoc:
V get(Object key)
和用于多重映射是:
Collection<V> get(K key)
请参阅,对于地图参数没有泛型。
在MultiMap
是通用的好,但地图的设计,因此与从Java 1.4以前Map
其向后兼容性。
不隶属于 StackOverflow