Java使用两种类型的映射上的泛型

Java使用两种类型的映射上的泛型,java,generics,Java,Generics,我有两种方法,第一种需要Map第二种是Map。如何创建涵盖这两种情况的通用映射?您不能。这将如何运作?如果第一个方法执行一个map.get(key)并获取一个ItemB[]而不是ItemB,那么它将使用ClassCastException进行投诉 泛型集合的全部要点是将这两种情况分开 您可以制作一个包装器,将映射包装为映射,返回一个数组,其中所有元素只包含一个元素。但这可能会给数组操作语义带来麻烦 也许只是复制所有内容: // upgrade from Map to MultiMap Has

我有两种方法,第一种需要
Map
第二种是
Map
。如何创建涵盖这两种情况的通用映射?

您不能。这将如何运作?如果第一个方法执行一个
map.get(key)
并获取一个
ItemB[]
而不是
ItemB
,那么它将使用
ClassCastException
进行投诉

泛型集合的全部要点是将这两种情况分开

您可以制作一个包装器,将
映射
包装为
映射
,返回一个数组,其中所有元素只包含一个元素。但这可能会给数组操作语义带来麻烦

也许只是复制所有内容:

 // 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()});
 }
//从映射升级到多映射
HashMap map1Copy=新的HashMap(map1.size());
对于(条目e:map1.entrySet()){
map1Copy.put(e.getKey(),newitemb[]{e.getValue()});
}

另一个方向(将
ItemB[]
转换为单个
ItemB
)通常不起作用。

您不能。这将如何运作?如果第一个方法执行一个
map.get(key)
并获取一个
ItemB[]
而不是
ItemB
,那么它将使用
ClassCastException
进行投诉

泛型集合的全部要点是将这两种情况分开

您可以制作一个包装器,将
映射
包装为
映射
,返回一个数组,其中所有元素只包含一个元素。但这可能会给数组操作语义带来麻烦

也许只是复制所有内容:

 // 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()});
 }
//从映射升级到多映射
HashMap map1Copy=新的HashMap(map1.size());
对于(条目e:map1.entrySet()){
map1Copy.put(e.getKey(),newitemb[]{e.getValue()});
}

另一个方向(将
ItemB[]
转换为单个
ItemB
)通常不起作用。

在我看来,你不能这样做,除非创建一个
映射
,它不能满足你的需要


但是,您也可以为需要非集合值的方法创建一个
映射
并在fyl上进行转换。

在我看来,您不能,除非创建一个
映射
,它不能满足您的需要


但是,您也可以创建一个
映射
,并在fyl上为需要非集合值的方法进行转换。

我认为,您最好是创建一个
映射
ItemB
ItemB[]
在类型层次结构方面几乎不相关


然后,您必须使用
instanceof
或其他工具来找出哪个是哪个,并分别处理它们。因此,您最好不要费心,对
ItemB
ItemB[]
:)

我认为,您最好使用
地图
ItemB
ItemB[]
在类型层次结构方面几乎不相关


然后,您必须使用
instanceof
或其他工具来找出哪个是哪个,并分别处理它们。因此,如果你真的想这样做,并且没有任何特殊的理由使用数组而不是列表,那么你最好不要麻烦,为
ItemB
ItemB[]
:)

创建一个Map>Map并处理不同的情况;列表中只有一个元素或多个元素。
但正如其他人所指出的,这似乎是两种不同的情况,应该是两种不同的映射。

如果你真的想这样做,并且没有任何特别的理由使用数组而不是列表,我建议创建一个映射>映射并处理不同的情况;列表中只有一个元素或多个元素。
但正如其他人指出的,这似乎是两种不同的情况,应该是两种不同的地图。

我已经检查了该地图的进一步使用,我认为这是处理该地图的最佳方式。谢谢。我已经检查了该地图的进一步使用情况,我认为这是处理该地图的最佳方式。谢谢