对我来说,问题是为对象实现克隆。此对象A的成员对象B,它不是由A创建的。我想克隆A,只有在构造A时才创建的对象才能被克隆。在A或A的对象中作为参考传递的对象或A的对象的对象不被克隆。它们应该只被引用。
这可能吗?我已经浏览了一些深度克隆库源(deep - cloner);看来他们无法区分。我无法进行序列化反序列化,因为我怀疑它不会解决我的情况。我必须克隆的对象A也非常复杂。我涉及项目中的几乎所有课程。 Apache序列化工具是否负责上述情况?
答案 0 :(得分:2)
这是不可能的。基本上,Java中没有任何内容可以让您确定何时创建给定对象。
如果对象A
能够保留其在构造函数中创建的成员对象的记录,那么您将能够对此问题产生任何牵引力的唯一方法就是。
答案 1 :(得分:1)
您需要手动实现A.clone()
,以便仅克隆要克隆的对象。 Object.clone
的默认实现执行浅复制操作,因此您需要执行以下操作:
public class A implements Cloneable {
[...]
public Object clone() {
Object obj = null;
try {
obj = super.clone();
// super.clone performs a "shallow copy" operation.
// Now you will need to manually clone any objects for
// which a "deep copy" operation is desired, e.g.
//
// obj.memberX = memberX.clone();
// obj.memberY = memberY.clone();
// ...
//
} catch (CloneNotSupportedException ex) {
// Should not happen..
}
return obj;
}
}
这假定您知道要克隆的对象(即在构造A期间创建的对象)。