JAVA对象属性复制

来源:互联网 发布:请假神器软件 编辑:程序博客网 时间:2024/05/04 21:32

需求:在不同类之间直接拷贝所有属性名称相同的属性值。

例如:

public class Class1 {
public int i;
public long l;
public String s;
public List<String> ls;

}

public class Class2{
public int i;
public long l;
public String s;
public List<String> ls;

//other members.

}

说明:现在已经有一个Class1的对象c1(所有属性均已赋值),现在要将这些值一次拷贝到Class2的对象c2中。

一、方法1:自己实现代码

http://blog.csdn.net/isea533/article/details/7851167

下面是一个简单的对象属性复制方法:

复制的对象必须同时拥有setter和getter方法...只有一个的时候会报异常,都没有的时候就不复制..

[java] view plaincopy
  1. import java.beans.BeanInfo;  
  2. import java.beans.Introspector;  
  3. import java.beans.PropertyDescriptor;  
  4.   
  5. public class CopyUtil{  
  6.     public static void Copy(Object source, Object dest)throws Exception {  
  7.         //获取属性  
  8.         BeanInfo sourceBean = Introspector.getBeanInfo(source.getClass(), java.lang.Object.class);  
  9.         PropertyDescriptor[] sourceProperty = sourceBean.getPropertyDescriptors();  
  10.           
  11.         BeanInfo destBean = Introspector.getBeanInfo(dest.getClass(), java.lang.Object.class);  
  12.         PropertyDescriptor[] destProperty = destBean.getPropertyDescriptors();  
  13.           
  14.         try{  
  15.             for(int i=0;i<sourceProperty.length;i++){  
  16.                   
  17.                 for(int j=0;j<destProperty.length;j++){  
  18.                       
  19.                     if(sourceProperty[i].getName().equals(destProperty[j].getName())){  
  20.                         //调用source的getter方法和dest的setter方法  
  21.                         destProperty[j].getWriteMethod().invoke(dest, sourceProperty[i].getReadMethod().invoke(source));  
  22.                         break;                    
  23.                     }  
  24.                 }  
  25.             }  
  26.         }catch(Exception e){  
  27.             throw new Exception("属性复制失败:"+e.getMessage());  
  28.         }  
  29.     }  
  30. }  
注:该方法已经验证可行。但要求相同名称的属性的类型一致。


二、方法2:BeanUtils.copyProperties(destObj, srcObj);

注意:

1、该方法要求属性类型相同。

2、需要import org.apache.commons.beanutils.PropertyUtils;

而不是com.sun.import org.apache.commons.beanutils.PropertyUtils;//该库中没有该方法。

三、方法3:PropertyUtils.copyProperties(destObj, srcObj);

注意:

1、该方法对不同类型的属性进行强制转换。

2、需要import org.apache.commons.beanutils.PropertyUtils;

而不是com.sun.import org.apache.commons.beanutils.PropertyUtils;//该库中没有该方法。



0 0
原创粉丝点击