如何将List<T>类型参数传入要求ArrayList<T>类型的构造器?
问题原因
报错的核心是Java泛型的类型匹配约束:Node构造器要求第二个参数为ArrayList<Node>子实现类类型,而你传入的node.neighbors是List<Node>父接口类型,无法直接隐式转换。
解决方法
直接把List<Node>类型的neighbors传入ArrayList的构造器,显式转换为ArrayList实例即可,符合语法要求且不需要修改原有Node类代码。
修改后代码
class Solution { public Node copyGraph(Node node) { // 显式将List转为ArrayList实例解决类型不匹配问题 Node n = new Node(node.val, new ArrayList<>(node.neighbors)); // 后续深拷贝逻辑 } }
补充注意事项
- 上述写法只是解决了编译报错问题,如果你要实现完整的图深拷贝,不能直接传入原节点的邻居列表,需要先递归拷贝所有邻居节点,再把拷贝后的邻居列表组装成
ArrayList传入构造器,避免新旧图的节点引用绑定。 - 如果你能确定运行时
node.neighbors的实际类型就是ArrayList,也可以用强制类型转换(ArrayList<Node>) node.neighbors,但这种写法有类型转换风险,不推荐使用,优先用构造器转换的写法。
内容的提问来源于stack exchange,提问作者brainoverflow
相关产品推荐
相关产品推荐

