我有三张地图:
Map<Integer,ArrayList<ItemType1>> map1;
Map<Integer,ArrayList<ItemType2>> map2;
Map<Integer,ArrayList<ItemType3>> map3;
我经常想要在地图中查找一个键并向其添加一个项目的ArrayList值。我想创建一个方法,将map Map<Integer,ArrayList<T>>
(具有通用类型T的ArrayList值),要添加的键以及要添加到该映射的T类型的项作为参数。 / p>
理论上是这样的(我知道这不是Java代码):
private void addToListInMap(Map<Integer,ArrayList<T>> map,Integer keyValue, T itemToAdd){
ArrayList<T> listOfItems= map.get(keyValue);
if(listOfItems == null){
listOfItems= new ArrayList<T>();
map.put(keyValue, listOfItems);
}
listOfItems.add(itemToAdd);
}
如何使用泛型来实现这样的效果?
答案 0 :(得分:5)
这并不是非常困难:将泛型类型作为方法的类型参数提供。
缺少的所有代码都是它的类型参数。然后,它应该“正常工作”。
private <T> void addToListInMap(Map<Integer, ArrayList<T>> map,
Integer keyValue, T itemToAdd) {
ArrayList<T> listOfItems = map.get(keyValue);
if (listOfItems == null) {
listOfItems = new ArrayList<T>();
map.put(keyValue, listOfItems);
}
listOfItems.add(itemToAdd);
}
答案 1 :(得分:4)
您需要输入方法,因此方法中的代码可以访问它(以创建新列表)。
private static <T> void addToListInMap(Map<Integer,ArrayList<T>> map, Integer keyValue, T itemToAdd {
ArrayList<T> listOfItems = map.get(keyValue);
if (listOfItems == null) {
listOfItems = new ArrayList<T>();
map.put(keyValue, listOfItems);
}
listOfItems.add(itemToAdd);
}
我也使用了方法static
,因为它不需要访问任何字段来工作。
您还应考虑将值List<T>
的类型设为ArrayList<T>
而不是{{1}} - 请参阅Liskov substitution principle