Java 如何从旧实例创建新实例?
在这种情况下,我需要从一个类的另一个实例创建一个新的类实例。它必须是一个新实例,而不是对旧实例的引用,因为需要在不影响旧实例的情况下操作新实例 我得出的结论是,我的类中以及该类中使用的每个类型的每个类中都必须有一个构造函数,它将自己的类型作为参数,并从该参数创建新类型:Java 如何从旧实例创建新实例?,java,c++,duplicates,createinstance,Java,C++,Duplicates,Createinstance,在这种情况下,我需要从一个类的另一个实例创建一个新的类实例。它必须是一个新实例,而不是对旧实例的引用,因为需要在不影响旧实例的情况下操作新实例 我得出的结论是,我的类中以及该类中使用的每个类型的每个类中都必须有一个构造函数,它将自己的类型作为参数,并从该参数创建新类型: public class MainClass { public Type0 type0; public Type1 type1; public Type2 type2; MainClass(M
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++中更容易,我可以简单地说NeWistSist= OLDebug。但是在Java中,从旧实例创建新实例的最佳实践是什么?这就是我要做的吗?在Java中,在每个类中都有这些类型的构造函数是最佳实践吗?或者有更好的方法吗?不要使用克隆方法(以防有人建议)
正确的做法是提供一个复制构造函数,该构造函数接受要复制的实例。这是Joshua Bloch在他的畅销书《有效Java》中推荐的在C++中,如果你说NeWistSist= OLDebug,它会为你创建一个新的实例吗?我认为不会。我以为会,但我已经有一段时间没有使用C++了。好的,很高兴知道,谢谢。我想我必须养成在每个类中定义副本构造函数的习惯。我希望默认情况下有一个复制构造函数,这将非常有意义。不客气。对不起,我只是在这里工作:)话虽如此,还是退房吧。如果您对我的答案感到满意,请随意选择,谢谢。