ClassCastException в Map.Entry

#java #generics

#java #общие

Вопрос:

в моем коде есть что-то, чего я не понимаю. когда я выполняю следующий код, className1 и value1 получают свое значение прямо из записи, но когда для className2 я получаю ClassCastException, дата не может быть преобразована в строку при обработке записи с помощью GetValue = {java.util .Дата @11632}»Вс Июн 01 00:00:00 PDT 1997″

 String key1="", className1="", value1="";
String key2="", className2="", value2="";
Object obj;

Map<String, String> inputValues = reportOptions.getInputValues();
for (Map.Entry<String, String> entry: inputValues.entrySet()){
    key1 = entry.getKey().toString();
    obj = entry.getValue();
    className1 = obj.getClass().getName();
    value1 = obj.toString();

    className2 = entry.getValue().getClass().getName();
    value2 = entry.getValue().toString();
}
  

должно быть просто, но мне этого не хватает…

Комментарии:

1. можете ли вы показать нам код, который заполняет карту входных значений?

Ответ №1:

Я предполагаю, что это происходит потому, что ваша карта, которую вы получаете, на самом деле не a Map<String,String> , а скорее a Map<String,Date> .

Ответ №2:

У reportOptions.getInputValues() вас есть какое-то небезопасное приведение, или вы используете необработанные типы, и ваша карта фактически содержит <String, Date> , а не <String, String> .

Ответ №3:

Чтобы найти ошибку, используйте Collections.checkedMap, чтобы программа взорвалась именно там, где неверные данные попадают на карту:

 java.util.HashMap map = new java.util.HashMap();
map.put(new Integer(4), new Integer(7)); // OK - HashMap does not care, nor does Java

java.util.Map safeMap = java.util.Collections.checkedMap(map,String.class,String.class);
safeMap.put(new Integer(6), new Integer(9)); // WILL blow up!