gpt4 book ai didi

java - 修改克隆对象

转载 作者:行者123 更新时间:2023-12-01 15:49:48 26 4
gpt4 key购买 nike

我正在尝试修改帐户对象,但所做的更改似乎随后没有出现在原始列表中。也许有人可以指出错误。

参见下面的代码:

if(aBank.getAccount(number)!=null){
System.out.println("Account information is listed below");
System.out.println(aBank.getAccount(number).toString());
System.out.println("Modify first name y or n");
answer=keyboard.nextLine();
if(answer.equals("Y")||answer.equals("y")){
System.out.println("Enter first name:");
firstName=keyboard.nextLine();
aBank.getAccount(number).getCustomer().setFirstName(firstName);

}
System.out.println("Modify last name y or n");
answer=keyboard.nextLine();
if(answer.equals("Y")|| answer.equals("y")){
System.out.println("Enter last name:");
lastName=keyboard.nextLine();
aBank.getAccount(number).getCustomer().setLastName(lastName);
}

}

else{
System.out.println("Account not found");
}

注意:getAccount(number) 返回帐户的克隆,它是深层复制,getCustomer 也返回一个克隆,它是深层复制

getAccount的内容

public Account getAccount(long accountNumber ) throws Exception { 
boolean found=false;
for(int i=0;i<accounts.size();i++){
if(accounts.get(i).getAccountNumber().compareTo(accountNumber)==0){
found=true;
return accounts.get(i).clone();
}
}
if (!found){
return null;
}
return null;
}

最佳答案

简单地调用clone()不会返回对象的深拷贝。它将返回一个浅副本。覆盖克隆是很棘手的。遵循约书亚·布洛赫 (Joshua Bloch) 的建议 Effective Java并避免使用 clone() 而使用复制构造函数。

private Account(Account account) { 
this.name = account.getName();
//etc
}

public void createCopy(Account account) {
return new Account(account);
}

另外,为什么不将 Accounts 集合存储在 Map 中,这样在复制之前就不需要遍历 N 个 Accounts 了?您还需要仔细阅读 Brian 的回答。

关于java - 修改克隆对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331698/

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