【发布时间】:2016-03-15 20:55:08
【问题描述】:
我正在尝试扩展here 发布的问题的解决方案。
那里共享的 castList 方法非常适用于非泛型类型。
public static <T> List<T> castList(Object obj, Class<T> clazz)
{
List<T> result = new ArrayList<T>();
if(obj instanceof List<?>)
{
for (Object o : (List<?>) obj)
{
result.add(clazz.cast(o));
}
return result;
}
return null;
}
我们遇到的问题是,当返回类型不是像字符串列表这样简单的东西,而是当列表本身是另一个泛型的时候,比如地图列表时,我们尝试使用相同的想法。
List<Map<String, Object>> list = (List<Map<String, Object>>) out.get("o_cursor");
尝试按如下方式使用 castList 会产生类型不匹配:无法从 List
List<Map<String, Object>> list = castList(out.get("o_cursor"), Map.class);
我尝试了特定于地图列表的修改版本,但仍然收到错误“方法 castMapList(Object, Class
public static <K, V> List<Map<K, V>> castMapList(Object object, Class<Map<K, V>> clazz) {
if (object instanceof List<?>) {
List <Map<K, V>> result = new ArrayList<Map<K, V>>();
for (Object o: (List<?>) object) {
result.add(clazz.cast(o));
}
return result;
}
return null;
}
【问题讨论】: