我有两种方法,第一种需要Map<ItemA, ItemB>,第二种需要Map<ItemA ,ItemB[]>。如何创建涵盖两种情况的通用地图?

最佳答案

你不能。这如何运作?如果第一个方法执行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)通常不起作用。

10-08 11:20