gpt4 book ai didi

java - cglib(java) 可以深度复制具有列表属性的 bean

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:41 24 4
gpt4 key购买 nike

这是代码

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
}

cglib中的beancopier可以深拷贝这个root到copyRoot吗?因为我发现当我使用 beancopier 时,两个实例仍然指向同一个列表实例

最佳答案

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

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

创建自动深层复制一开始可能不是一个好主意,但您可以查看 appropriate utilities .

关于java - cglib(java) 可以深度复制具有列表属性的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37566188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com