如何从旧实例创建新实例

How do I create a new instance from an old one?

本文关键字:实例 新实例 创建      更新时间:2023-10-16

我有一种情况,需要从该类的另一个实例创建该类的新实例。它必须是一个新实例,而不是对旧实例的引用,因为需要在不影响旧实例的情况下操作新实例。

我得出的结论是,我必须在我的类中,在每个类中为该类中使用的每个类型都有一个构造函数,它将自己的类型作为参数,并根据该参数创建新的类型:

public class MainClass {
    public Type0 type0;
    public Type1 type1;
    public Type2 type2;

    MainClass(MainClass mc) {
        type0 = new Type0(mc.type0);
        type1 = new Type1(mc.type1);
        type2 = new Type2(mc.type2);
    }
}

public class Type0() {
    public int i;
    public SomeOtherType t;
    Type0(Type0 t0) {
        i = t0.i;
        t = new SomeOtherType(t0.t);
    }
}
 . . . 

在C++中,这一切都会容易得多,我可以简单地说newInstance=oldInstance。但是在Java中,从旧实例创建新实例的最佳实践是什么?这就是我要做的吗?在Java中,在每个类中都有这些类型的构造函数是最佳实践吗?或者有更好的方法吗?

不建议使用clone方法(以防有人建议)。

你是正确的,一个好的方法是提供一个复制构造函数来复制一个实例。这是Joshua Bloch在他的畅销书《高效Java》中推荐的。