如何将初始化的HashMap作为参数传递?

时间:2014-04-09 23:00:01

标签: java 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
} 

4 个答案:

答案 0 :(得分:2)

创建它,初始化它,然后传递它:

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

你可以使用David Wallace在评论中提到的“双卷曲”风格,我想:

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

这实际上从HashMap派生了一个新类,并在初始化程序块中设置了值。我并不特别关心它(因此最初没有提到它),但它本身并没有真正引起任何问题,它更像是一种风格偏好(它确实吐了一个额外的.class文件,尽管大多数情况并不是什么大不了的事。如果您愿意,可以将它全部压缩到一行,但可读性会受到影响。

答案 1 :(得分:0)

您无法同时致电put并将HashMap传递给该方法,因为the put method未返回HashMap。它返回旧映射中的旧值(如果存在)。

你必须创建地图,单独填充,然后传入。无论如何,它更具可读性。

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

答案 2 :(得分:0)

的HashMap&LT; K,V&GT;。放

public **V** put(K key,V value)
  • 将指定的值与此映射中的指定键相关联。如果 地图以前包含键的映射,旧值是 替换。
  • 返回关联的上一个值,如果有,则返回null 没有密钥的映射。 (null返回也可以指示地图 先前与密钥关联的null。)

如您所见,它不会返回类型HashMap<?, ?>

答案 3 :(得分: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);