gpt4 book ai didi

java - 深拷贝似乎不起作用

转载 作者:行者123 更新时间:2023-12-01 17:12:10 25 4
gpt4 key购买 nike

我有两个类,一个类称为 Client,另一个类称为 Department。 Department 类存储一组 Clients。

我做了一些测试来证明 Java 中的深度复制,但它似乎不起作用。

在 Department 类中,我有一个 get 方法,它返回存储的客户端列表。例如:

public Client[] getClientList() {
return clientList;
}

返回我存储的客户端数量的方法:

public int getNumberClients() {
return n;
}

以及一种从 clientList 返回特定 Client 的方法:

public Client getClient(int pos){
return clientList[pos];
}

在我的主程序中,我创建了一定数量的客户端并将它们存储到 Department 类中,特别是在 clientList 属性中;像这样的东西:

Client objCli1=new Cliente(...
...
Department objDep=new Department(100)
objDep.addClient(objCli1)
...

所以现在我想将 Department 类中的客户端数组返回到我的主程序中,并将它们的元素复制到另一个客户端数组中。像这样的事情:

Client[] clientList;
int n=objDep.getNumberClients();
clientList=new Client[n];
for (int i=0;i<n;i++){
clientList[i]=objDep.getClient(i);
}

因此,当我打印 clientList 的元素时,它们与我的 Department 类中的元素相同。问题是,如果我这样做:

clientList[2].setName("Michaels")

它更改了我存储在部门类中的第二个客户的名称;我想知道这是为什么?因为我已将 Department 类中的元素深度复制到主程序中的新 clientList 中。那么为什么不工作呢?任何关于如何做到这一点的提示都会很棒。

谢谢

最佳答案

在您的客户端类中创建一个克隆方法。像这样

public Client clone(){
Client client = new Client();
client.name=name;
client.id=id;
...

// copy each element property;

return client;

}

并在此处使用它

Client[] clientList;
int n=objDep.getNumberClients();
clientList=new Client[n];
for (int i=0;i<n;i++){
clientList[i]=objDep.getClient(i).clone();
}

关于java - 深拷贝似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23234617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com