我应该知道这一点,但由于某种原因我无法理解这一点。
为什么我不能将对象 List<Object>
列表转换为地图列表List<Map<String, Object>>
?列表中的每个对象都是 type 的对象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);
}
Run Code Online (Sandbox Code Playgroud)
您可以通过双重转换来删除泛型参数:
@SuppressWarnings("??unchecked")
List<Map<String, Object>> rxData =
(List<Map<String, Object>>) (List<?>) dataList;
Run Code Online (Sandbox Code Playgroud)
这里的情况是,您强制编译器不检查泛型类型,方法是先将其省略,然后再进行未经检查的强制转换为List<Map<String, Object>>
. 这是可能的,因为 java 泛型是不可修改的。
最初的错误是由Object
与Map<>
类型不兼容的事实引起的,并且在 java 中没有像协变/逆变类型这样的东西(与scala
example不同)。
但是如果dataList
不包含地图会出现问题。
归档时间: |
|
查看次数: |
10317 次 |
最近记录: |