[英]Using generics to add an object of generic type to a map
我有三張地圖:
Map<Integer,ArrayList<ItemType1>> map1;
Map<Integer,ArrayList<ItemType2>> map2;
Map<Integer,ArrayList<ItemType3>> map3;
我經常想在地圖中查找一個鍵,並在其ArrayList值中添加一個項目。 我想創建一個方法,將地圖Map<Integer,ArrayList<T>>
(具有通用類型T的ArrayList值),要添加的鍵以及要添加到的類型T的項作為參數那張地圖。
理論上是這樣的(我知道這不是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);
}
如何使用泛型實現這樣的效果?
這並不是非常困難:將泛型類型作為方法的類型參數提供。
您缺少的所有代碼都是它的類型參數。 然后,它應該“正常工作”。
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);
}
您需要鍵入方法,因此方法中的代碼可以訪問它(以創建新列表)。
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>
- 請參閱Liskov替換原則
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.