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
的子类,用一张图来说明:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!