关于org.springframework.beans.BeanUtils.copyProperties(Object source, Object target)
        DemographicDetail detail = new DemographicDetail ();
        detail.setGender ("male");
        // List<OtherName>是DemographicDetail的成员属性
        OtherName name = new OtherName();
        name.setFirstName ("firstName");
        name.setLastName ("lastName");
        
        List <OtherName> otherName = new ArrayList <OtherName> ();
        otherName.add (name);
        detail.setOtherName (otherName);
        
        //把上面定义的detail的属性复制到detail2中
        DemographicDetail detail2 = new DemographicDetail ();
        BeanUtils.copyProperties (detail, detail2);
        1)修改detail2中的gender,没有影响detail中gender的值。
        2)然后我修改detail2中的otherName的firstName值,却同时把detail中的firstName的值也修改了,就是说其实复制到detail2中的otherName其实是一份引用。这里特别想知道,这两种情况是怎么回事,求教!!!
        3)像类似这样的情况,我想要复制一份实例,而不是一个引用。通常有哪些处理方法???

解决方案 »

  1.   

    org.springframework.beans.BeanUtils.copyProperties如何实现的不知道,
    一般就是深度clone了。
      

  2.   

    里特别想知道,这两种情况是怎么回事,求教!!! 
    detail.setGender   ( "male ");  //gender是个字符串
    detail.setOtherName   (otherName); //otherName是个list
    修改detail2的gender相当于把detail2的gender指向另一个字符串,所以不会影响detail的gender
    修改detail2的otherName的情况,因为detail和detail2的otherName都指向同一个list对象,所以修改detail2的otherName的元素,就相当于修改otherName所引用的list的元素,就相当于修改detail的otherName的元素,而otherName的元素是个OtherName对象,所以修改detail2中的otherName的firstName,相当于修改了同一个list的OtherName对象的firstName3)像类似这样的情况,我想要复制一份实例,而不是一个引用。通常有哪些处理方法???
    修改BeanUtils.copyProperties   (detail,   detail2); 方法
    或者自己进行深度拷贝
    DemographicDetail   detail2   =   new   DemographicDetail   (); 
    //BeanUtils.copyProperties   (detail,   detail2); 
    detail2.setGender(detail.getGender);
    List<OtherName> tmp = new ArrayList <OtherName>(); 
    for (OtherName o : otherName) {
        OtherName oo = new OtherName();
        oo.setFirstName(o.getFirstName());
        oo.setLastName(o.getLastName());
        tmp.add(oo);
    }
    detail2.setOtherName(tmp);