在使用谷歌收藏之前,我有类似下一个代码:
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;
}
}
...
}
答案 0 :(得分:8)
试试这个:
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,你会发现Map的javadoc是:
V get(Object key)
并且对于MultiMap是:
Collection<V> get(K key)
看到Map的参数没有被广泛化。
MultiMap
对于泛型更好,但Map的设计使其与Java 1.4中的先前Map
具有向后兼容性。