如何使用<T> <T> 构造函数将 List 类型的变量设置为类型为 ArrayList 的值



图节点的实现如下(我无法从编码网站更改实现(:

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

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

不兼容的类型:列表无法转换为ArrayList

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

否则,我怎么能用这个实现创建一个新的Node?

问题

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

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

……或者如果顺序不重要,甚至可能是更通用的Collection

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

变通办法

有两种方法可以解决这种糟糕的设计:铸造或复制。

  • 如果您确信您的List对象实际上是ArrayList,请按照coconan的正确答案进行强制转换
  • 如果您不确定List对象的具体实现,请在传递List的同时构造一个新的ArrayList
Node n = new Node ( node.val, new ArrayList < Node > ( nodesList ) );

您可以使用(ArrayList<node>(将node.neighbors强制转换为ArrayListnode.neighbors

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

相关内容

最新更新