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的子类,用一张图来说明:
image

posted @ 2023-11-16 09:05  rockdow  阅读(226)  评论(0)    收藏  举报