Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cglib(java)可以深度复制具有list属性的bean吗_Java_Deep Copy_Cglib - Fatal编程技术网

cglib(java)可以深度复制具有list属性的bean吗

cglib(java)可以深度复制具有list属性的bean吗,java,deep-copy,cglib,Java,Deep Copy,Cglib,这是密码 public class Root { private Long id; private List<Child> list; //getter and setter } public class Child { private Long id; //getter and setter } public static void main(String args) { Child child = new Child(); child.setId(1L

这是密码

public class Root {
 private Long id;
 private List<Child> list;
 //getter and setter
}
public class Child {
 private Long id;
 //getter and setter
}

public static void main(String args) {
    Child child = new Child();
    child.setId(1L);
    List<Child> list = new ArrayList<>();
    list.add(child);
    Root root = new Root();
    Root copyRoot = new Root();
    root.setId(2L);
    root.setList(list);

    BeanCopier copier1 = BeanCopier.create(Root.class, Root.class, false);
    copier1.copy(root, copyRoot, null);
    //can beancopier in cglib deep copy this root to copyRoot?
    //because i found when i used beancopier the two instances still point the same list instance
}
公共类根目录{
私人长id;
私人名单;
//接二连三
}
公营儿童{
私人长id;
//接二连三
}
公共静态void main(字符串参数){
子项=新子项();
儿童。setId(1L);
列表=新的ArrayList();
列表。添加(子项);
根=新根();
Root copyRoot=新根();
根setId(2L);
root.setList(list);
BeanCooter copier1=BeanCooter.create(Root.class,Root.class,false);
copier1.copy(root,copyRoot,null);
//cglib deep中的BeanCooter能否将此根目录复制到copyRoot?
//因为我发现当我使用BeanCooler时,这两个实例仍然指向同一个列表实例
}
cglib deep中的BeanCooter能否将此根目录复制到copyRoot?
因为我发现当我使用BeanCooler时,这两个实例仍然指向同一个列表实例

,所以cglib使用代码生成改进复制的方法是创建一个类,该类对提供的类进行子类化。cglib需要为每个嵌套类型执行此操作,而不知道为每个字段分配了子类的哪个实例,因此,这无法工作

一般来说,我建议您也不要依赖代码生成来完成此任务;这只在JVM还年轻的时候才真正提供了性能优势。现代虚拟机在使用反射(例如Apache的bean实用程序)时表现同样出色


然而,首先创建自动深度复制可能不是一个好主意,但您可以研究一下。

cglib使用代码生成改进复制的方法是创建一个类,该类将提供的类作为子类。cglib需要为每个嵌套类型执行此操作,而不知道为每个字段分配了子类的哪个实例,因此,这无法工作

一般来说,我建议您也不要依赖代码生成来完成此任务;这只在JVM还年轻的时候才真正提供了性能优势。现代虚拟机在使用反射(例如Apache的bean实用程序)时表现同样出色

然而,首先创建一个自动化的深度拷贝可能不是一个好主意,但您可能会考虑