我有不同类别的地图键
class MapKeyParent{}
class MapKeyOne<U> extends MapKeyParent{}
class MapKeyOne<U,V> extends MapKeyParent{}
我有一个类,其中有一组可以容纳这些键的地图,
class MapStorage{
Map<MapKeyParent, Integer>[] mapArray;
public MapStorage() {
super();
mapArray=
new HashMap<MapKeyParent, Integer>[NO_OF_RANKS];
mapArray[0] = new HashMap<MapKeyParent, Integer>();
mapArray[1] = new HashMap<MapKeyParent, Integer>();
....
}
public void addToMap(int index, MapKeyParent key, Integer value )
{
mapArray[index].put(key, value);
}
public Integer getFromMap(int index, MapKeyParent key)
{
return mapArray[index].get(key);
}
}
如何在声明,放置和获取时将Generics应用于MapSeyParent的MapStorage?
答案 0 :(得分:1)
数组不能具有参数化类型的组件类型。在运行时,由于类型擦除,参数化类型将丢失泛型类型信息。这将允许将实现Map
接口的任何对象添加到数组中。
您可以使用List
并将其类型参数指定为Map<MapKeyParent, Integer>
来解决此问题。
List<Map<MapKeyParent, Integer>> mapList;
有关更详细的说明,请参阅Generic Faq。
这需要您重构代码:
class MapStorage{
List<Map<MapKeyParent, Integer>> mapList;
public MapStorage() {
mapList.add(new HashMap<MapKeyParent, Integer>());
mapList.add(new HashMap<MapKeyParent, Integer>());
....
}
public void addToMap(int index, MapKeyParent key, Integer value )
{
mapList.get(index).put(key, value);
}
public Integer getFromMap(int index, MapKeyParent key)
{
return mapList.get(index).get(key);
}
}