寻找正确的克隆方法

时间:2013-05-29 05:42:37

标签: java clone

我的课程Calle包含String nombre;int addr;。但是,我所做的clone方法给了我错误的价值。

public class Calle{
    String nombre;
    int addr;

    public Object clone(){
        return this;
    }
}

Calle c1 = new Calle("a",1);
Calle c2 = c1.clone();
c2.setAddr(3);

System.out.println(c1.addr); // value wrong

为什么价值不对?

3 个答案:

答案 0 :(得分:3)

你的克隆方法是错误的,因为它并没有真正克隆任何东西,它只是返回相同的对象。 clone应始终为对象,其值与原始对象相同。

在这种情况下,您看起来已经有了一个复制构造函数,所以只需使用它来创建新的Calle并将其返回。

public Object clone(){
    return new Calle(this.nombre, this.addr);
}

答案 1 :(得分:2)

对于您的情况,您可以使用Object提供的标准浅克隆方法。只要String是不可变的并且将复制int值,就没有理由重写复制逻辑。只是让它可见。

public Object clone(){
    return super.clone();
}

Cloneable接口也应该实现。

答案 2 :(得分:1)

你的克隆方法是错误的,因为它并没有真正克隆任何东西,它只是返回相同的对象。

 public Object clone() throws CloneNotSupportedException{
    return super.clone();
}

这种克隆只会进行浅层克隆。如果你想要深度克隆,你需要编写你想要克隆的逻辑。