Вы можете разыграть Map<Integer, Object>
на Map<String, Object>
"без проблем" ... пока не попытаетесь использовать it.
Проблема начинается с этой строки:
Map<String, Object> sMap = (Map<String, Object>)iMap;
, где компилятор предупреждает вас этим сообщением:
Тип безопасности: непроверенное приведение с объекта на карту
Вы проигнорировали это предупреждение.
Все это происходит из-за стирания типа во время выполнения - во время выполнения нет типов, например, у вас есть только Map
и т. Д. Типы просто есть при компиляции, чтобы помочь не делай то, что ты здесь делаешь.
Причина взрыва этой строки:
String s = new ArrayList<String>(sMap.keySet()).get(0);
заключается в том, что sMap фактически ссылается на карту, в которой в ее записях указаны целые числа для ключей. Когда вы на самом деле пошли, чтобы вытащить один из ключей, это было Integer, которое Java затем пытается присвоить String ... boom!
кстати, эта часть не компилируется:
Object iMap = new HashMap<Integer, Object>();
iMap.put(5, "thing1");
iMap.put(6, "thing2");
вам нужно привести iMap к Map<Integer, Object>
следующим образом:
Object iMap = new HashMap<Integer, Object>();
((Map<Integer, Object>)iMap).put(5, "thing1");
((Map<Integer, Object>)iMap).put(6, "thing2");