我有一个Map<String,Object>
要转换为ConcurrentMap<String,Object>
Map<String,Object> testMap = new HashMap<String,Object>();
testMap.put("test", null); //This null causing issues in conversion
testMap.put("test2","123");
testMap.put("test3",234);
ConcurrentMap<String,Object> concMap = new ConcurrentHashMap<>(testMap);
我得到一个空指针异常。如果我复制到新的HashMap<String,Object>
Map<String,Object> testMap = new HashMap<String,Object>();
testMap.put("test", null);
testMap.put("test2","123");
testMap.put("test3",234);
Map<String,Object> concMap = new HashMap<>(testMap);
我没有任何错误。有没有Map<String,Object>
ConcurrentMap<String,Object>
到NullPointerException
的安全方法
答案 0 :(得分:2)
它在documentation for ConcurrentHashMap
中:
类似于Hashtable,但与HashMap不同,此类不允许将null用作键或值。
对于其他ConcurrentMap,the only other implementation ConcurrentSkipListMap
, does not allow null either。
答案 1 :(得分:2)
如果您查看ConcurrentHashMap的源代码,您将看到它不允许使用null键或值-
java.util.concurrent.ConcurrentHashMap#putVal
/** Implementation for put and putIfAbsent */
final V putVal(K key, V value, boolean onlyIfAbsent) {
if (key == null || value == null) throw new NullPointerException();
答案 2 :(得分:0)
问题不在于将HashMap
转换成ConcurrentHashMap
。它更多地是关于ConcurrentHashMap
是null安全的,它不允许null
值。从其documentation:
类似于
Hashtable
,但与HashMap
不同,此类不允许null
用作键或值。