我应该知道这一点,但出于某种原因我无法理解这一点。
为什么我不能将对象列表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);
}
答案 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;