我有兩種方法,第一種需要Map<ItemA, ItemB>
第二種Map<ItemA ,ItemB[]>
。我如何創建一個涵蓋兩種情況的通用映射?Java在泛型上使用泛型有兩種類型
0
A
回答
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
)一般不工作。
2
在我看來,你不能,除非創建一個Map<ItemA, Object>
這不會滿足你的需要。
但是,您也可以創建一個Map<ItemA, ItemB[]>
並在fyl上對需要非收集值的方法進行轉換。
1
我認爲你可以做的最好的是Map<ItemA, ?>
。 ItemB
和ItemB[]
在類型層次結構方面幾乎沒有關係。
然後,您必須使用instanceof
或其他東西來弄清楚哪些是哪些和分別處理它們。所以你還不如不打擾,並有ItemB
和ItemB[]
:)
0
單獨的方法,如果你真的想這樣做,並沒有使用數組來代替列表中的任何特殊原因,我建議創建一個地圖>地圖和處理不同的案件;列表中只有一個元素或多個元素。 但正如其他人指出,它似乎是兩個不同的情況,應該是兩個不同的地圖。
相關問題
- 1. 具有兩種泛型的泛型類
- 2. 的Java泛型類型泛型類型
- 3. Java泛型有兩類
- 4. Java泛型 - 使用具有相同類名的類型實現兩種泛型類型的方法
- 5. 兩種類型的泛型類
- 6. 如何使用泛型類型的泛型列表泛型類
- 7. Java泛型:parametricise泛型類型
- 8. Java泛型類型
- 9. Java - 泛型類型
- 10. Java泛型類和非泛型類
- 11. 泛型類型的泛型?
- 12. 在java中使用泛型類型
- 13. Java類泛型
- 14. Java創建具有泛型類型的泛型類
- 15. Java泛型 - 錯誤鑄造泛型類
- 16. 多種類的上界 - Java泛型
- 17. 嵌套泛型泛型類
- 18. Java - 啓動不具有泛型類型的泛型變量;
- 19. 在Java中使用泛型類和泛型方法很困難
- 20. Java泛型 - 類型聲明
- 21. Java的泛型和類型
- 22. Java泛型類型參數
- 23. Java泛型類型轉換
- 24. 泛型類型Java中
- 25. 比較泛型類型Java
- 26. Java泛型類型擦除
- 27. 的Java getMethod()泛型類型
- 28. Java泛型 - 類型推斷
- 29. Java泛型和界類型
- 30. Java:獲得泛型類型
我檢查了該地圖的進一步使用,我認爲這是處理該地圖的最佳方式。謝謝。 – 2010-03-19 08:11:26