首页 > 解决方案 > 如何设置 List 类型的变量类型为 ArrayList 的值使用构造函数

问题描述

图节点的实现如下(我无法更改实现,因为它来自编码网站):

class Node {
    public int val;
    public List<Node> neighbors;
    public Node(int _val, ArrayList<Node> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
}

如果我将一个节点传递给下面的 copyGraph 函数,我将无法通过调用 Node 构造函数来制作该节点的副本,因为我得到

不兼容的类型:无法将 List 转换为 ArrayList

class Solution {
    public Node copyGraph(Node node) {
        Node n = new Node(node.val, node.neighbors);
        //do some code
    }
}

我怎么能用这个实现创建一个新节点?

标签: javalistconstructor

解决方案


问题

该 API 设计不佳,仅供参考。构造函数应该接受 aList而不是ArrayList. 理想情况下,该代码将是:

public Node ( int _val , List < Node > _neighbors ) { … }

Collection……如果顺序不重要,甚至可能更普遍。

public Node ( int _val , Collection < Node > _neighbors ) { … }

解决方法

解决这种糟糕设计的两种方法:强制转换或复制。

  • 如果您确定您的List对象实际上是一个, 转换,如coconanArrayList的正确答案所示。
  • 如果您不确定List对象的具体实现,请ArrayList在传递您的List.
Node n = new Node ( node.val, new ArrayList < Node > ( nodesList ) );

推荐阅读