Java嵌套泛型转换的一个小问题
在刷LeetCode的时候遇到了这样一个报错:incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>>
具体的代码片段如下:
class Solution {
public List<List<Integer>> generate(int numRows) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
for(int i=0;i<numRows;i++){
ArrayList<Integer> tmp = new ArrayList<>();
if(i==0){
tmp.add(1);
} else if(i==1){
tmp.add(1);
tmp.add(1);
} else{
for(int j=0;j<=i;j++){
if(j==0 || j==i){
tmp.add(1);
} else{
tmp.add(list.get(i-1).get(j-1)+list.get(i-1).get(j));
}
}
}
list.add(tmp);
}
return list;
}
}
该方法要求返回一个List<List<Integer>>类型的变量,而我返回的是ArrayList<ArrayList<Integer>>类型的变量,就出现了上面的报错。按照常理,父类引用可以指向子类对象,而ArrayList又是List接口的实现类,不应该产生问题。但是,在这里犯了一个泛型转换常见的错误,即要把内部的ArrayList<Integer>类型转换为List<Integer>类型,但这两个类本身并不存在实现或继承关系,他们都是Object的子类,用一张图来说明:

浙公网安备 33010602011771号