下面给出了一个示例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
。
以这种方式更改声明有何不同?