这里是道码
@Select("select * from my_table order by id limit 1")
Map<String, String> selectFirst();
如您所见,我将返回类型指定为 Map<String, String>
。现在出现了困惑:
Map<String, String> firstRow = myDao.selectFirst();
Object o = firstRow.get("id");
System.out.println(o.getClass()); // class java.lang.Integer
// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
int id = Integer.parseInt(firstRow.get("id"));
所以我从Map<String, String>
那里得到了Integer
,怎么会这样?
如果 Dao 方法的实际返回类型是 Map<String, Object>
,如何将其分配给Map<String, String>
?
你的DAO返回untyped map
,这与Map<Object, Object>
相同。可以将其分配给类型化地图。但是,当您使用集合元素进行操作时,它将尝试将元素强制转换为指定类型,如果无法强制转换,则会引发异常。
// untyped map
Map objectMap = new HashMap();
objectMap.put("key", new Integer(12));
// assign
Map<String, String> stringMap = objectMap;
// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
System.out.print(stringMap.get("key"));
解决方案:使用Map<Object, Object>
类型或在这种情况下Map<String, Object>
就可以了。
// untyped map
Map objectMap = new HashMap();
objectMap.put("key", new Integer(12));
// assign
Map<String, Object> stringMap = objectMap;
System.out.print(stringMap.get("key"));