Hashmap в Hashmap - PullRequest
       14

Hashmap в Hashmap

5 голосов
/ 07 июля 2011

У меня есть хеш-карта

Map<String, Object> grpFields = new HashMap<String, Object>();

, которая содержится в другом хэш-карте:

Map<Integer, Object> targetFields = new LinkedHashMap<Integer, Object>();

Я вижу его в режиме отладки:

20005=0, 453={452-2=7, 452-0=1, 452-1=17, 448-2=81, 448-1=0A, 447-2=D, 447-1=D, 447-0=D, 448-0=0A}, 11=1116744Pq2Q,

453 - это Hashmap, однако при попытке извлечь hashmap из родительского hashmap, используя:

HashMap <String, Object> grpMap453 = (HashMap)targetFields.get(453);

Я брошен:

java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String

Конечно, вызов targetFields.get(453); должен просто вернутьсяхэш-карта?

Ответы [ 4 ]

10 голосов
/ 07 июля 2011

Я попытался сделать демонстрацию на основе того, что вы описали, и не нашел в ней ошибок.

    HashMap<String, Object> hashMap = new HashMap<String, Object>();
    hashMap.put("123", "xyz");
    HashMap<Integer, Object> map = new HashMap<Integer, Object>();
    map.put(453, hashMap);
    HashMap<String, Object> newMap = (HashMap<String, Object>) map.get(453);

    System.out.println("Main map "+ hashMap);
    System.out.println("Map inside map "+map);
    System.out.println("Extracted map "+newMap);

В строке HashMap<String, Object> newMap = (HashMap<String, Object>) map.get(453); выдается предупреждение, что " Тип безопасности: Не проверено приведение из Object в HashMap", но ошибки нет вообще.

Вы делаете то же самое?

0 голосов
/ 03 декабря 2018

Поместить значение в HashMap

HashMap<String, Map<?,?>> hashMap = new HashMap<String, Map<?,?>>();

Map<String, String> internalHashMap  = new HashMap<String, String>()

internalHashMap.put("TEST_KEY1","TEST_Value1");
internalHashMap.put("TEST_KEY2","TEST_Value2");
internalHashMap.put("TEST_KEY3","TEST_Value3");

hashMap.put("TEST_KEY",internalHashMap);
0 голосов
/ 16 марта 2012

Как уже отмечалось, вы не можете получить эту ошибку из строки кода, где вы извлекаете HashMap.Однако вы получите эту ошибку со следующей строкой кода:

String s11 = (String)targetFields.get(453);
0 голосов
/ 07 июля 2011

Вместо:

HashMap <String, Object> grpMap453 = (HashMap)targetFields.get(453);

Попробуйте

HashMap <String, Object> grpMap453 = (HashMap<String,Object>)targetFields.get(453);
...