繁体   English   中英

MyBatis返回hashmap真实类型

[英]MyBatis return hashmap real type

这是Dao代码

@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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM