كيفية أعاد من خلال 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;
}
}
...
}
وتحرير:
إذا كنت ترى جافادوك لكل الطبقات، وسوف يدركون أن جافادوك للخريطة هو:
V get(Object key)
ووMultiMap هو:
Collection<V> get(K key)
وانظر أن المعلمة لخريطة لا generified.
ووMultiMap
هو خير عام، ولكن تم تصميم خريطة لذلك فقد compability مع الإصدارات السابقة مع Map
سابقة من جاوة 1.4.
لا تنتمي إلى StackOverflow