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 @   rockdow  阅读(175)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示