2014-04-09 84 views
0

如何以最典型(最簡單,最短的)形式傳遞新的HashMap?如何將初始化的HashMap作爲參數傳遞?

// 1. ? (of course this doesn't work) 
passMyHashMap(new HashMap<String, String>().put("key", "val")); 

// 2. ? (of course this doesn't work) 
passMyHashMap(new HashMap<String, String>(){"key", "val"}); 


void passMyHashMap(HashMap<?, ?> hm) { 
    // do stuff witih my hashMap 
} 
+0

哈,總是有「雙大」符號,但是我感覺如果我張貼作爲一個答案,就會有誰看過的地方,有人認爲它是一個反模式downvoters。 –

+0

@DavidWallace貼吧!如果你清楚地解釋*它做了什麼以及它爲什麼起作用,那麼應該沒有問題。 – Darkhogg

+0

@DavidWallace無論如何,我會爲球隊帶一支。我將它添加到我的答案中。 –

回答

2

創建,初始化,然後將它傳遞:

Map<String,String> myMap = new HashMap<String,String>(); 
myMap.put("key", "val"); 
passMyHashMap(myMap); 

您可以使用 「雙大」 的風格,大衛·華萊士提到了一個評論,我想:

passMyHashMap(new HashMap<String,String>(){{ 
    put("x", "y"); 
    put("a", "b"); 
}}); 

這基本上從HashMap派生出一個新類,並在初始化塊中設置值。我並不特別關心它(因此最初沒有提及它),但它本身並沒有真正導致任何問題,它更像是一種風格偏好(它確實吐出了一個額外的.class文件,雖然在大多數情況下不是這樣一大筆交易)。如果你願意的話,你可以把它全部壓縮到一行,但可讀性會受損。

+0

真棒,再次! – JaJ

0

您不能撥打put並將HashMap同時通過該方法,因爲the put method不會返回HashMap。它從舊映射返回舊值(如果存在)。

您必須創建地圖,單獨填充地圖,然後將其傳入。無論如何,它的可讀性更高。

HashMap<String, String> map = new HashMap<>(); 
map.put("key", "val"); 
passMyHashMap(map); 
0

HashMap中< K,V>。把

public **V** put(K key,V value) 
  • 將指定值與此映射指定的鍵。如果 映射先前包含密鑰的映射,則替換舊值 。
  • 返回關聯的先前值,或空,如果有 鍵的映射關係。 (返回null還可以表示該映射以前 null與key關聯。)

正如你所看到的,它不返回類型HashMap<?, ?>

0

你不能做到這一點。你可以做的是創建一個工廠,讓你這樣做。

public class MapFactory{ 
    public static Map<String, String> put(final Map<String, String> map, final String key, final String valeu){ 
       map.put(key, value); 
       return map; 
    } 
} 

passMyHashMap(MapFactory.put(new HashMap<String, String>(),"key", "value")); 

儘管我無法想象需要這種實現的方法,但我也有點不喜歡它。我建議你創建你的地圖,傳遞值然後發送給你的方法。

Map<String, String> map = new HashMap<String, String>(); 
map.put("key","value"); 
passMyHashMap(map); 
相關問題