奇怪的错误Java Hashmap类型为Long,String

时间:2016-05-13 13:58:01

标签: java dictionary

我在Java程序中有一种非常奇怪的行为。我有一个Long,Long hashmap,从一个方法中检索但是当我试图从中获取信息时,这个hashmap是一个String,String没有任何错误也没有警告..在我的代码下面:

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

1 个答案:

答案 0 :(得分:0)

编译期间会删除有关泛型的信息。因此,在运行时,您的方法只返回HashMap。所以有趣的问题是.getResultList()方法的返回值的实际类型。