Map.Entry中的classCastException

时间:2011-10-20 21:19:16

标签: java generics

我的代码中有一些我不明白的东西。 当我执行以下代码时,className1和value1从条目中获取它们的值,但是当我为className2获取ClassCastException时,在处理getValue = {java.util.Date@11632}的条目时,不能将日期强制转换为String “Sun Jun 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();
}

应该很简单,但我很想念......

3 个答案:

答案 0 :(得分:2)

我猜这是因为您获得的地图实际上不是Map<String,String>而是Map<String,Date>

答案 1 :(得分:1)

reportOptions.getInputValues()你有一些不安全的演员表,或者你使用的是原始类型,而你的地图实际上包含<String, Date>而不是<String, String>

答案 2 :(得分:0)

要查找错误,请使用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!