【问题标题】:How do I create a new instance from an old one?如何从旧实例创建新实例?
【发布时间】:2014-11-10 22:27:27
【问题描述】:

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

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

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 中,在每个类中都有这些类型的构造函数是最佳实践吗?还是有更好的方法来解决这个问题?

【问题讨论】:

  • 在 C++ 中,如果你说 newInstance = oldInstance,那会为你创建一个新实例吗?我认为不会。
  • 我以为是的,但是我已经有一段时间没有使用C++了

标签: java c++ duplicates createinstance


【解决方案1】:

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

你是对的,一个好的方法是提供一个复制构造函数,它接受一个实例来复制。这是 Joshua Bloch 在他的畅销书《Effective Java》中所推荐的。

【讨论】:

  • 好的,很高兴知道,谢谢。我想我必须养成在每个类中定义一个复制构造函数的习惯。我希望默认情况下有一个复制构造函数,这会很有意义。
  • 不客气。抱歉,我只是在这里工作 :) 话虽如此,请查看this。如果您满意,请随意选择我的答案,谢谢。
猜你喜欢
  • 2020-10-10
  • 2017-05-03
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2021-09-21
相关资源
最近更新 更多