如何从不同的包中深度复制相同的对象,但具有相同的结构而不进行序列化?
示例:
package com.foo;
class Tree{
List<Leaf> leaf;
Int trunk;
}
和
package com.bar;
class Tree{
List<Leaf> leaf;
Int trunk;
}
都具有更复杂的子对象(ArrayList 的 ArrayList)。 这基本上是我通过不同的网络服务收到的相同对象,因此位于不同的包中。
我希望能够将所有不同版本“映射”到同一对象,例如
转换:com.bar.Tree barTree = (com.foo.Tree) fooTree;
或深层复制:com.bar.Tree barTree = DeepCopy.(fooTree);
预期结果是 barTree.leaf[k] == fooTree.leaf[k]
和 barTree.trunk==fooTree.trunk
。
理论上我可以通过反射将所有计算递归复制到另一个对象的相应元素(具有相同的名称),但是没有更简单的方法吗?
编辑:更复杂的示例。
最佳答案
您可以在每个类中添加所谓的复制构造函数,该类接受另一个类的实例作为参数,例如:
package com.foo;
class Tree{
String leaf;
Int trunk;
Tree(com.bar.Tree tree){
this.leaf = tree.leaf;
this.trunk = tree.trunk;
}
}
然后您将执行以下操作:
com.bar.Tree barTree = new com.bar.Tree(fooTree);
关于java - 没有包名的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38506287/