gpt4 book ai didi

java - Java中如何避免克隆后传递对象?

转载 作者:行者123 更新时间:2023-12-02 01:36:55 30 4
gpt4 key购买 nike

我有一个 Node 对象,想要从这个原始对象创建一些克隆对象。下面是我的代码:

public class Main {
public static void main(String[] args) {
Node node = new Node();
node.setName("node1");
node.setValue("1");
node.setChildNodes(new ArrayList<>());

Node node2 = cloneNode(node);
Node childNode2 = new Node();
childNode2.setName("childNode2");
childNode2.setValue("1");
List<Node> childNodes2 = node2.getChildNodes();
childNodes2.add(childNode2);
node2.setChildNodes(childNodes2);
System.out.println(node.getChildNodes());

}

private static Node cloneNode(Node node) {
Node newNode = new Node();
newNode.setName(node.getName());
newNode.setValue(node.getValue());
newNode.setChildNodes(node.getChildNodes());
return newNode;
}

}

class Node {
private String name;
private String value;
private List<Node> childNodes;

//getter and setter
}

我创建了第一个节点并创建了从第一个节点克隆的第二个节点。然后我想修改第二个节点对象(node2)中的childNodes列表,然后我意识到第一个节点(node)中的childNodes列表也被修改。

如何避免第一个节点中的列表被修改?

非常感谢!

最佳答案

您所做的是一种浅克隆。您可能想克隆得更深而不是

newNode.setChildNodes(node.getChildNodes())

您还应该克隆子节点。正确的方法是this

或者,您可以直接序列化反序列化对象,这是克隆深层对象的简单方法

例如: 只需将 Node1 转换为 JSON 字符串,然后将该字符串转换回 Node2 (提示:使用 gson 库)

关于java - Java中如何避免克隆后传递对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55104499/

30 4 0
文章推荐: java - 如何在 java 中将 UnmodifyingRandomAccessList 设置为 Set