我有invoice对象,它有两个属性,productDescription和productQuantity,下面是代码:
public class Invoice() implements Cloneable
{
private String productDescription;
private int productQuantity;
//Getters & Setters
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}现在我想在这个类上创建对象的副本,所以我正在做
Invoice invoiceCopy = (Invoice)invoice.clone();现在,如果我更新invoiceCopy.setProductQuanity = 10的值,那么invoice也会更新该值,但这不应该发生,有什么建议吗?
更新代码
public class Invoice implements Cloneable {
private String productDescritpion;
private int productQuantity;
public String getProductDescritpion() {
return productDescritpion;
}
public void setProductDescritpion(String productDescritpion) {
this.productDescritpion = productDescritpion;
}
public int getProductQuantity() {
return productQuantity;
}
public void setProductQuantity(int i) {
this.productQuantity = i;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
Invoice invoice = new Invoice();
invoice.setProductQuantity(10);
invoice.setProductDescritpion("nike");
Invoice invoiceCopy = null;
try {
invoiceCopy = (Invoice) invoice.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
invoiceCopy.setProductQuantity(20);
System.out.println("Invoice quantity: " + invoice.getProductQuantity());
System.out.println("InvoiceCopy quantity: "
+ invoiceCopy.getProductQuantity());
}
}发布于 2012-08-08 20:49:16
默认的克隆方法是肤浅的。您必须自己编写一个新方法,或者使用一个库来实现您想要的功能(例如,请参阅apache的BeanUtils )。
如果您想要编写它,请尝试如下:
public class Invoice implements Cloneable {
private String productDescription;
private int productQuantity;
public Invoice() {
}
public Invoice(Invoice copy) {
productDescription = copy.productDescription;
productQuantity = copy.productQuantity;
}
public Object clone() throws CloneNotSupportedException {
return new Invoice(this);
}}
发布于 2012-08-08 20:46:36
您只是在调用clone()方法Object,它不会对您的类产生任何影响。您需要返回对象的一个新实例:
public class Invoice() implements Cloneable {
private String productDescription;
private int productQuantity;
public Invoice() {
}
private Invoice(String productDescription, int productQuantity) {
this.productDescription = productDescription;
this.productQuantity = productQuantity;
//Getters & Setters
public Object clone() throws CloneNotSupportedException {
return new Invoice(productDescription, productQuantity);
}
}我添加了构造函数来传递参数。
https://stackoverflow.com/questions/11872824
复制相似问题