linkedcaseinsensitivemap 是弹簧框架的一部分,扩展了 linkedhashmap
层次结构是这样的:
java.lang.Object
java.util.abstractmap
java.util.hashmap
java.util.linkedhashmap
org.springframework.util.linkedcaseinsensitivemap
有关信息,请参阅:https://docs.spring.io/spring/docs/3.2.4.release_to_4.0.0.m3/spring framework工作
现在我有此代码:
List<HashMap<String, String>> l_lstResult = (List<HashMap<String, String>>)service.fetchRowwiseMultipleRecords(p_iQueryName, l_hmParams, userDetails);
l_lstCityTownList = new ArrayList<String>(l_lstResult.size());
for (int i = 0; i < l_lstResult.size(); i++) {
HashMap<String, String> l_hmColmnData = l_lstResult.get(i);
String l_sValue = l_hmColmnData.get(p_sColumnName);
l_lstCityTownList.add(l_sValue);
}
l_lstresult返回linkedcaseinsentivemap,我在行中获得错误 hashmap l_hmcolmndata = l_lstresult.get(i);
java.lang.classcastException: org.springframework.util.linkedcaseinsensitivemap不能施放到 java.util.hashmap
问题是,我使用弹簧版4.3.14.列出而遇到此错误,而3.2.3.3.reles中没有错误。3.2.3.reles中的规范在哪里允许这种铸造。
任何建议,示例都会对我有很大帮助。
非常感谢!
从春季4.3.6. release开始,linkedcaseinsensitivemap不再扩展linkedhashmap和hashmap,而只会实现MAP接口。
API参考。
当您将service.fetchRowwiseMultipleRecords(p_iQueryName, l_hmParams, userDetails)
施放到List<HashMap<String, String>>
时,您只是告诉编译器 trust 您。但是,当涉及到列表的第一个元素时,它会失败,因为它是不是 hashmap而是linkedcaseinsensitivemap(不扩展hashmap)。
这将解决您的问题
List<LinkedCaseInsensitiveMap<String>> l_lstResult = service.fetchRowwiseMultipleRecords(p_iQueryName, l_hmParams, userDetails);
l_lstCityTownList = new ArrayList<String>(l_lstResult.size());
for (int i = 0; i < l_lstResult.size(); i++) {
LinkedCaseInsensitiveMap<String> l_hmColmnData = l_lstResult.get(i);
String l_sValue = l_hmColmnData.get(p_sColumnName);
l_lstCityTownList.add(l_sValue);
}