簡體   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