我有一个这样的列表 - [[1, 2, 3], [4, 5, 6, [1, 2, 3]]]
下面是我的代码-
List<Object> inner1=new ArrayList<Object>();
inner1.add(1);
inner1.add(2);
inner1.add(3);
List<Object> inner2=new ArrayList<Object>();
inner2.add(4);
inner2.add(5);
inner2.add(6);
inner2.add(inner1);
List<Object> outer=new ArrayList<Object>();
outer.add(inner1);
outer.add(inner2);
System.out.println(outer);
for(List<Object> list:(List<List<Object>>)outer){ //compile fail
for(Object innerData:(List<Object>)list){
if (innerData instanceof List) {
for(Integer data: (List<Integer>)innerData){
System.out.println(data);
}
}else{
System.out.println(innerData);
}
}
}
为什么这个编译在迭代外部列表时失败。
我知道outer中的所有对象都是List<Object>
所以这是一个List<List<Object>>
在 List<List<Object>>
中类型转换外部结果编译失败。
如果这不是想要的结果,则应该是 ClassCastException
而不是编译失败?
最佳答案
编译错误,因为您的外部类型是 List<Object>
无法转换为 List<List<Object>>
.
您的代码应该是:
for (Object list : outer) {
if (list instanceof List) {
for (Object innerData : (List<Object>) list) {
if (innerData instanceof List) {
for (Integer data : (List<Integer>) innerData) {
System.out.println(data);
}
} else {
System.out.println(innerData);
}
}
}
}
关于java - 迭代列表上编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31067165/