簡體   English   中英

使用泛型將泛型類型的對象添加到地圖中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM