Ошибка приведения карты в LinkedCaseInsensitive с HashMaps с более поздней версией Spring - PullRequest
0 голосов
/ 14 февраля 2019

LinkedCaseInsensitiveMap является частью Spring Framework и расширяет 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%20Framework%203.2.4.RELEASE/org/springframework/util/LinkedCaseInsensitiveMap.html

Теперь у меня есть этот код:

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 возвращает LinkedCaseInsensitiveMap, и я получаю ошибку в строке HashMap l_hmColmnData = l_lstResult.get (i);

java.lang.ClassCastException: org.springframework.util.LinkedCaseInsensitiveMap нельзя привести к java.util.HtilMap1033 *

Дело в том, что я получаю эту ошибку с версией Spring 4.3.14.RELEASE и без ошибок в 3.2.3.RELEASE.Где находится спецификация в 3.2.3.RELEASE, которая разрешает этот кастинг.

Любые предложения, примеры мне очень помогут.

Большое спасибо!

1 Ответ

0 голосов
/ 14 февраля 2019

С весны 4.3.6.RELEASE LinkedCaseInsensitiveMap больше не расширяет LinkedHashMap и HashMap, а только реализует интерфейс карты.

Справочник по API .

Когда выприведите service.fetchRowwiseMultipleRecords(p_iQueryName, l_hmParams, userDetails) к List<HashMap<String, String>>, вы просто указываете компилятору доверять вам.Но затем, когда дело доходит до получения первого элемента списка, происходит сбой, потому что это не 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);
}
...