将List <object>转换为List <map <string,object =“”>&gt;

时间:2016-08-15 22:34:56

标签: java hashmap

我应该知道这一点,但出于某种原因我无法理解这一点。

为什么我不能将对象列表List<Object>投射到地图列表List<Map<String, Object>>?列表中的每个对象都是Map<String, Object>类型的对象,那么为什么不能进行转换呢?

我可以做的是创建一个new ArrayList<Map<String, Object>>();并遍历列表并使用强制转换添加每个项目。

List<Object> dataList;
..
//Why doesn't this work?
List<Map<String, Object>> rxData = (List<Map<String, Object>>)dataList;

//This works, but is there a better way?
rxData = new ArrayList<Map<String, Object>>();
for (Object data : dataList) {
    rxData.add((Map<String, Object>)data);
}

2 个答案:

答案 0 :(得分:4)

List<Object>List<Map<String, Object>> are not compatible types,因此您无法直接将其中一个投射到另一个。您必须首先转换为常见的超类型,然后向下转换:

List<Map<String, Object>> rxData = (List<Map<String, Object>>)(List<?>)dataList;

请注意,您仍会在编译时收到警告,因为它是unsafe cast

答案 1 :(得分:0)

检查以下链接

https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html

两个通用类Type1和Type2根本没有相关性。所以你不能互相攻击。

但是你可以做一些不安全的操作并将自己从循环中解脱出来。

//unsafe assignments
List rxData = (List<Map<String, Object>>)dataList;

List<Object> dataList = (List<Object>)rxData;