LinkedCaseInsentive Map铸造问题带有弹簧更高版本的哈希图



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);
}

最新更新