为什么java在...复杂时返回java.util.LinkedHashMap

时间:2013-08-07 10:19:46

标签: java list generics collections casting

我的代码如下......

@ResponseBody 
@RequestMapping(value ="/updateAll", method=RequestMethod.POST)  
public JSONObject update( @RequestBody List<T> list){ 
    try{
        T entity = list.get(0);
        System.out.println(entity.getClass());
        dbService.update(entityName + ".update", list);
        return jsonResult(null, null, null, 0);
    }catch(Exception ex){
        return jsonResult(null, null, ex, 0);
    }
}

当我通过@RequestBody只获得一个实体时,它返回一个正确的对象名,但上面的代码返回java.util.LinkedHashMap,我不能在iBatis中使用parameterClass的优点。 (抱歉我的英语不好......)

我再次将列表转换为T,但它仍返回LinkedHashMap。

不是代码[T entity = list.get(0); ]意味着它将列表识别为对象T的集合?

@ResponseBody 
@RequestMapping(value ="/updateAll", method=RequestMethod.POST)  
public JSONObject update( @RequestBody T entity){ 
    try{
        System.out.println(entity.getClass());
        dbService.update(entityName + ".update", entity);
        return jsonResult(null, null, null, 0);
    }catch(Exception ex){
        return jsonResult(null, null, ex, 0);
    }
}

这会毫无问题地打印实体名称。

有人能解释我为什么会这样吗?我可以在哪里了解更多相关信息?

1 个答案:

答案 0 :(得分:0)

 /**
     * Returns the runtime class of this {@code Object}. The returned
     * {@code Class} object is the object that is locked by {@code
     * static synchronized} methods of the represented class.
     *
     * <p><b>The actual result type is {@code Class<? extends |X|>}
     * where {@code |X|} is the erasure of the static type of the
     * expression on which {@code getClass} is called.</b> For
     * example, no cast is required in this code fragment:</p>
     *
     * <p>
public final native Class<?> getClass();

什么参考类型无关紧要。方法getClass()返回runtime class