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()
Другие вопросы по тегам