LinkedHashMap с различными типами данных
У меня есть LinkedHashMap
Мой код
LinkedHashMap<String, String> hmap = (LinkedHashMap<String, String>)data[0];
System.out.println("Contents of LinkedHashMap : " + hmap);
System.out.println("\nValues of map after iterating over it : ");
for (String key : hmap.keySet()) {
System.out.println(key + ":\t" + hmap.get(key));
}
Выход:
Значения карты после итерации по ней: cd: PARB id_inst:PE103AA01 cd_anul:
Ошибка вызова метода: generateReport
java.lang.ClassCastException: java.lang.Double нельзя привести к java.lang.String
Содержимое LinkedHashMap:
{cd=PARB,id_inst=PE103AA01, cd_anul=, mnt=276562.5, dt_den_theo=2012-01-24 00:00:00, logo=PARB.bmp, id=ISI.model.ParamRecord-1}
Как я могу использовать String
а также Double
в моем Hashmap
без LinkedHashMap<String, Object>
?
2 ответа
Я не уверен, что у вас есть родовые типы <String, Object>
с вашим кодом, если нет, должна быть ошибка компиляции в for (String key : hmap.keySet()) {
В противном случае это работает хорошо.
Ваша проблема не в том, что LinkedHashMap не может содержать экземпляры String и Double. Это на самом деле прекрасно может. Проблема в том, что вы делаете с этими значениями, когда выполняете итерацию списка. Если вы попытаетесь использовать значение в качестве String, когда оно равно Double, вы получите ClassCastException. Если все, что вам нужно, это экземпляр String относительно фактического класса объекта, вы можете вызвать toString(), чтобы преобразовать его следующим образом:
Object o = hmap.get(key);
String stringVal = (o == null) ? null : o.toString()