利用反射技术实现POJO值拷贝

//原代码如下:

import java.lang.reflect.*;

public class ValueCopy{

 

/**

 *

 *功能:从第一个POJO(objFirst)类中将值拷贝到第二个POJO(objTwo)中去

 *

 *@Date:2008-12-08

 *

 */
 public void valueCopy(Object objFirst,Object objTwo)throws Exception{
  Class<?> objFirstClass = objFirst.getClass();
  Class<?> objTwoClass = objTwo.getClass();
                              
  Field[] field = objTwoClass.getDeclaredFields();
  for(int i=0;i<field.length;i++){
   String fieldName = field[i].getName();
   String firstEdh = fieldName.substring(0,1).toUpperCase();
   String setMethodName = "set"+firstEdh+fieldName.substring(1);
   String getMethodName = "get"+firstEdh+fieldName.substring(1);
   
   Method getMethod = objFirstClass.getMethod(getMethodName,new Class[]{});
   Method setMethod = objTwoClass.getMethod(setMethodName,new Class[]{field[i].getType()});
   
   Object value = getMethod.invoke(objFirst,new Object[]{});
   setMethod.invoke(objTwo,new Object[]{value});
   
  }
  
 }
 
 public static void main(String[] args){
  UserForm userForm = new UserForm();
  userForm.setUsername("狂智");
  userForm.setPassword("123456");
  userForm.setEmail("ffr@163.com");
  userForm.setAge(24);
  
  User user = new User();
  try {
   new ValueCopy().valueCopy(userForm,user);
   
   
   Class userClass = user.getClass();
   System.out.println ("-------------"+user.getClass().getName()+"-------------");
   Field[] field = userClass.getDeclaredFields();
   for(int i=0;i<field.length;i++){
    String fieldName = field[i].getName();
    String firstEdh = fieldName.substring(0,1).toUpperCase();
    String getMethodName = "get"+firstEdh+fieldName.substring(1);
    
    Method getMethod = userClass.getMethod(getMethodName,new Class[]{});
    Object value = getMethod.invoke(user,new Object[]{});
    System.out.println (fieldName+": "+value);
   }
   System.out.println ("----------------结束----------------");
   
   
     }
     catch (Exception ex) {
      ex.printStackTrace();
     }
  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值