2010-03-19 125 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

单独的方法,如果你真的想这样做,并没有使用数组来代替列表中的任何特殊原因,我建议创建一个地图>地图和处理不同的案件;列表中只有一个元素或多个元素。 但正如其他人指出,它似乎是两个不同的情况,应该是两个不同的地图。