如何克隆/复制我自己的类的实例?

时间:2016-05-31 10:29:56

标签: java deep-copy

这种使用clone的方式是否正确?我每次都会收到运行时错误。任何人都可以建议在这个类中编写复制构造函数的方法吗?

public class Pair {
    final StringBuffer x;
    final StringBuffer y;

    public Pair(StringBuffer x, StringBuffer y) {
        this.x = x;
        this.y = y;
    }

    public StringBuffer getX() {
        return x;
    }

    public StringBuffer getY() {
        return y;
    }

    public Pair clone() {
        Pair p = new Pair(new StringBuffer(), new StringBuffer());
        try {
            p = (Pair) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new Error();
        }
        return p;
    }
}

1 个答案:

答案 0 :(得分:3)

复制构造函数:

public Pair(Pair other) {
  this.x = new StringBuffer(other.x.toString());
  this.y = new StringBuffer(other.y.toString());
}

你应该avoid using clone()

  
      
  • clone在所有情况下正确实施都非常棘手,几乎到了病态
  •   
  • 复制对象的重要性将始终保持,因为对象字段通常需要进行防御性复制
  •   
  • 复制构造函数和静态工厂方法提供了克隆的替代方法,并且更容易实现
  •