Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在google集合中迭代';多重映射<;?,对象>;?_Java_Generics_Collections_Guava - Fatal编程技术网

Java 如何在google集合中迭代';多重映射<;?,对象>;?

Java 如何在google集合中迭代';多重映射<;?,对象>;?,java,generics,collections,guava,Java,Generics,Collections,Guava,在使用google collections之前,我有一些类似的代码: 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)) {

在使用google collections之前,我有一些类似的代码:

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;
      }
   }
   ...
}
private Set aSet=。。。;
私有集bSet=。。。;
公共Foo getFoo(地图集){
用于(对象项:集合){
for(Bar:Bar.get(项目)){
//建富;
}
}
...
}
我可以打这样的电话:

Map<A, List<Bar> aMap = getAMap ();
Foo f1 = getFoo (aMap, aSet);
Map<B, List<Bar> bMap = getBMap ();
Foo f2 = getFoo (bMap, bSet);
地图集){
用于(对象项:集合){
//编译错误:Multimap中的get(捕获#621 of?)无法应用于java.lang.Object
for(Bar:Bar.get(项目)){
//建富;
}
}
...
}
试试这个:

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;
      }
   }
   ...
}
对于MultiMap,是:

Collection<V> get(K key) 
集合获取(K键)
请确保映射的参数未泛化

MultiMap
更适合于泛型,但Map的设计使其与Java 1.4中以前的
Map
具有向后兼容性

试试这个:

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;
      }
   }
   ...
}
对于MultiMap,是:

Collection<V> get(K key) 
集合获取(K键)
请确保映射的参数未泛化


MultiMap
更适合于泛型,但Map的设计使其与Java 1.4中以前的
Map
具有向后兼容性

是的,它起作用了。但是我不清楚为什么我们需要指定?t确保映射的set和key元素来自同一类型multimap必须确保key的类型正确,因为返回的集合是“写入”到multimap本身的。(也就是说,您可以向其中添加一个元素,并且相应的条目会出现在multimap中;如果键的类型错误,我们就会破坏数据)。Map没有这样的问题,使用Object作为get()的参数类型是绝对正确的。是的,它可以工作。但是我不清楚为什么我们需要指定?t确保映射的set和key元素来自同一类型multimap必须确保key的类型正确,因为返回的集合是“写入”到multimap本身的。(也就是说,您可以向其中添加一个元素,并且相应的条目会出现在multimap中;如果键的类型错误,我们就会破坏数据)。Map没有这样的问题,使用Object作为get()的参数类型是绝对正确的。