1

Googleコレクションを使用する前に、次のコードに似たものがありました:

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;
      }
   }
   ...
}
4

1 に答える 1

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 はMapJava 1.4 からの下位互換性を持つように設計されています。

于 2010-01-14T14:32:10.140 に答える