2010-03-19 182 views

回答

2

你不能。這是如何工作的?如果第一種方法執行map.get(key)並獲得ItemB[]而不是ItemB,則它會投訴ClassCastException

泛型集合的要點是將這兩種情況分開。

您可以製作一個包裝Map<ItemA, ItemB>作爲Map<ItemA, ItemB[]>的包裝,返回一個只包含一個元素的數組。但是這可能會導致數組操作語義問題。

也許只是複製一切:

// upgrade from Map to MultiMap 
HashMap<ItemA, ItemB[]> map1Copy = new HashMap<ItemA, ItemB[]>(map1.size()); 
for (Entry<ItemA, ItemB> e: map1.entrySet()){ 
    map1Copy.put(e.getKey(), new ItemB[]{ e.getValue()}); 
} 

另一個方向(轉換ItemB[]成一個單一的ItemB)一般不工作。

+0

我檢查了該地圖的進一步使用,我認爲這是處理該地圖的最佳方式。謝謝。 – 2010-03-19 08:11:26

2

在我看來,你不能,除非創建一個Map<ItemA, Object>這不會滿足你的需要。

但是,您也可以創建一個Map<ItemA, ItemB[]>並在fyl上對需要非收集值的方法進行轉換。

1

我認爲你可以做的最好的是Map<ItemA, ?>ItemBItemB[]在類型層次結構方面幾乎沒有關係。

然後,您必須使用instanceof或其他東西來弄清楚哪些是哪些和分別處理它們。所以你還不如不打擾,並有ItemBItemB[] :)

0

單獨的方法,如果你真的想這樣做,並沒有使用數組來代替列表中的任何特殊原因,我建議創建一個地圖>地圖和處理不同的案件;列表中只有一個元素或多個元素。 但正如其他人指出,它似乎是兩個不同的情況,應該是兩個不同的地圖。