1
使用谷歌集合之前,我有類似下面的代碼的東西:如何迭代谷歌集合的Multimap <?, Object>?
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;
}
}
...
}
是的,它的工作原理。但我不清楚爲什麼我們需要指定? –
Roman
2010-01-14 14:40:39
T確保映射的集合和鍵的元素來自相同的類型 – nanda 2010-01-14 14:42:44
Multimap必須確定鍵的類型是正確的,因爲您獲取的集合是「直寫」到multimap本身中的。 (也就是說,您可以添加一個元素,並且相應的條目出現在multimap中;如果該鍵的類型錯誤,我們會破壞數據)。 Map沒有這樣的擔心,並且在使用Object作爲get()的參數類型時絕對正確。 – 2010-01-15 00:13:43