以下是一个例子,使用了
这段代码看起来运行良好,它展示了一个键和与该键相关联的值。
然后它会抛出一个异常 -
org.apache.commons.collections.map.MultiValueMap
(来自commons-collections-3.2.1):Map<String, Object> multiValueMap = MultiValueMap.decorate(new HashMap<String, Object>());
multiValueMap.put("orderId", 1L);
for(Map.Entry<String, Object> entry : multiValueMap.entrySet()) {
List<Object> value = (List<Object>) entry.getValue();
System.out.println(entry.getKey()+" : "+value.get(0));
}
这段代码看起来运行良好,它展示了一个键和与该键相关联的值。
如果声明更改如下:
Map<String, Object> multiValueMap = MultiValueMap.decorate(new HashMap<String, Object>(){{
put("orderId", 1L);
}});
然后它会抛出一个异常 -
java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.List
在唯一的foreach
循环的第一行。
在这种情况下,给定的MultiValueMap
实际上不是真正的MultiValueMap
。它更像是一个普通的HashMap
。
这样改变声明有什么区别呢?