我有两种方法,第一种需要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
)通常不起作用。