簡體   English   中英

可以cglib(java)深度復制具有list屬性的bean

[英]can cglib(java) deep copy a bean that has a list property

這是代碼

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。

但是,創建自動深層副本可能不是一個好主意,但您可能會查看相應的實用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM