كيفية أعاد من خلال Multimap مجموعات جوجل '<؟، كائن>؟

StackOverflow https://stackoverflow.com/questions/2064724

سؤال

وقبل استخدام مجموعات جوجل كان لي شيئا من هذا القبيل إلى رمز المقبل:

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

وتحرير:

إذا كنت ترى جافادوك لكل الطبقات، وسوف يدركون أن جافادوك للخريطة هو:

V get(Object key) 

ووMultiMap هو:

Collection<V> get(K key) 

وانظر أن المعلمة لخريطة لا generified.

ووMultiMap هو خير عام، ولكن تم تصميم خريطة لذلك فقد compability مع الإصدارات السابقة مع Map سابقة من جاوة 1.4.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top