如何以最规范(最简单,最简短的手)形式传递新的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 :(得分: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)
public **V** put(K key,V value)
如您所见,它不会返回类型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);