代码之家  ›  专栏  ›  技术社区  ›  Georg Leber

Java在两种类型的Map上使用泛型

  •  0
  • Georg Leber  · 技术社区  · 16 年前

    我有两种方法,第一种需要 Map<ItemA, ItemB> Map<ItemA ,ItemB[]> . 如何创建覆盖这两种情况的通用映射?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Thilo    16 年前

    你不能。这是怎么回事?如果第一种方法 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()});
     }
    

    另一个方向(转换) 项目B[] 变成一个单一的 项目B

        2
  •  2
  •   Riduidel    16 年前

    在我看来你不能,除非 Map<ItemA, Object> 这不能满足你的需要。

    但是,也可以创建 Map<ItemA, ItemB[]> 对于需要非集合值的方法,在fyl上进行转换。

        3
  •  1
  •   Chris    16 年前

    Map<ItemA, ?> ItemB ItemB[]

    你就得用 instanceof 或者是找出哪个是哪个,然后分开处理。所以你最好别费心了,有单独的方法来解决这个问题 和 项目B[]

        4
  •  0
  •   Alex    16 年前

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