java两个实体用等号赋值_转 利用java反射实现两个具有相同属性bean赋值

packagecom.dobn.bdgcgl.utils;importjava.lang.reflect.Field;importjava.lang.reflect.Method;public classClassReflection {/***@paramclass1 用于赋值的实体类

*@paramclass1 需要待赋值的实体类

*@authorym

* @CreateTime 2012-11-22下午03:23:23

* 描述:反射实体类赋值*/

public static void reflectionAttr(Object class1,Object class2) throwsException{

Class clazz1=Class.forName(class1.getClass().getName());

Class clazz2=Class.forName(class2.getClass().getName());//获取两个实体类的所有属性

Field[] fields1 =clazz1.getDeclaredFields();

Field[] fields2=clazz2.getDeclaredFields();

ClassReflection cr= newClassReflection();//遍历class1Bean,获取逐个属性值,然后遍历class2Bean查找是否有相同的属性,如有相同则赋值

for(Field f1 : fields1) {if(f1.getName().equals("id"))continue;

Object value= cr.invokeGetMethod(class1 ,f1.getName(),null);for(Field f2 : fields2) {if(f1.getName().equals(f2.getName())){

Object[] obj= new Object[1];

obj[0] =value;

cr.invokeSetMethod(class2, f2.getName(), obj);

}

}

}

}/***

* 执行某个Field的getField方法

*

*@paramclazz 类

*@paramfieldName 类的属性名称

*@paramargs 参数,默认为null

*@return

*/

privateObject invokeGetMethod(Object clazz, String fieldName, Object[] args)

{

String methodName= fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);

Method method= null;try{

method= Class.forName(clazz.getClass().getName()).getDeclaredMethod("get" +methodName);returnmethod.invoke(clazz);

}catch(Exception e)

{

e.printStackTrace();return "";

}

}/***

* 执行某个Field的setField方法

*

*@paramclazz 类

*@paramfieldName 类的属性名称

*@paramargs 参数,默认为null

*@return

*/

privateObject invokeSetMethod(Object clazz, String fieldName, Object[] args)

{

String methodName= fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);

Method method= null;try{

Class[] parameterTypes= new Class[1];

Class c=Class.forName(clazz.getClass().getName());

Field field=c.getDeclaredField(fieldName);

parameterTypes[0] =field.getType();

method= c.getDeclaredMethod("set" +methodName,parameterTypes);returnmethod.invoke(clazz,args);

}catch(Exception e)

{

e.printStackTrace();return "";

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值