2016-05-13 42 views
0

我在Java程序中有一個非常奇怪的行爲。我有很長很長的HashMap,從方法檢索,但是當我試圖從它那裏得到的信息,此HashMap是一個字符串,字符串沒有任何錯誤,也沒有警告..下面我的代碼:奇怪的錯誤Java Hashmap類型長,字符串

List<HashMap<Long, Long>> getAggregateResult(String idCheptel, Integer limit) { 
    StringBuilder hql = new StringBuilder(); 
    hql.append("select new map(t.prod.id, count(t.prod.id))"); 
    ... //rest of implem. 
    return entityManager.createQuery(hql.toString()).setMaxResults(limit).getResultList(); 
} 

呼叫功能

... //in other method try to retrieve the information 
    for (HashMap<Long, Long> map : getAggregateResultVetProduct(idCheptel, limit)) { 
      System.out.println(">>>>>>>" + map.get(0L)); //always null 
      //the map is asked in Long, but in debugger it's a String, String 
      for (Map.Entry<Long, Long> entry : map.entrySet()) { 
       System.out.println("Key: " + entry.getKey()); //here key are 0 
       System.out.println("Value: " + entry.getValue()); 
      } 
     } 

的如果有人可以給我一些信息,爲什麼會出現這種行爲。謝謝。

編輯

這裏的一些信息: 我使用的IntelliJ。在調試器的屏幕截圖下方,因爲它被問到。

enter image description here

+0

你能顯示你引用的調試器輸出或屏幕截圖嗎? –

+0

getAggregateResultVetProduct的做法是什麼? – mvera

+0

我猜也是entityManager.createQuery不返回一個HashMap。 – mvera

回答

0

約泛型信息編譯過程中被刪除。所以在運行時你的方法只返回HashMap。所以有趣的問題是什麼是.getResultList()方法的返回值的實際類型。