【发布时间】:2014-03-08 13:07:05
【问题描述】:
我正在学习java。这是我编写的代码,作为了解如何在 java 中克隆对象的一部分...
Class Address {
String city;
String state;
}
class Customer implements Cloneable {
String name;
Address address;
public Customer(String name, String city, String state) {
this.name = name;
address = new Address();
address.city = city;
address.state = state;
}
public Object clone() {
Customer coned = null;
try {
cloned = super.cloned();
return cloned;
} catch(CloneNotSupportedException e) {
return null;
}
}
}
这里我想克隆一个Customer对象如下--
Customer customer = new Customer("john", "acity", "astate");
Customer newCustomer = (Customer) customer.clone();
newCustomer.address.city = "bcity";
问题来了。一旦我为city 设置了一个新值,它实际上也会更新原始对象。我的目标是将Customer 对象的所有内容复制到一个新对象中,这样我就可以安全地修改新对象而不影响原始对象。
为此,我修改了 Customer 类的 clone 方法 --
public Object clone() {
Customer coned = null;
try {
cloned = super.cloned();
clone.address = (Address) address.clone();
return cloned;
} catch(CloneNotSupportedException e) {
return null;
}
}
这是更新后的地址类 --
class Address {
String city;
String state;
public Object clone()
throws CloneNotSupportedException
{
return super.clone();
}
}
谁能帮我理解没有正确克隆address的原因是什么
对象。
【问题讨论】:
-
你永远不会在你的客户对象上调用
.clone()。 -
抱歉,我在从文本编辑器复制时忘记添加克隆行。修改了我的问题。所以当我执行程序时克隆方法就在那里,但是它没有帮助。