写了个反射 bean中的属性互相copy 记录一下

package com.util;

import java.lang.reflect.Method;

/**
* 文件名称:BeanUtil.java
* 摘要:<p>Bean操作工具类</p>
* @author 崔小东
* @date 2009-12-28 ver 1.0
*/
public class BeanUtil {

/**
* 方法名称:bean2Bean
* 摘要:<p>copy对象frm中属性的值到dest对象中同名属性中</p>
* @author 崔小东
* @date 2009-12-28 ver 1.0
* @param frm
* @param dest
*/
public static void bean2Bean(Object frm, Object dest){
try{
//取得frm对象中的方法的集合
Method[] argsFrmMtd = frm.getClass().getDeclaredMethods();
//取得dest对象中方法的集合
Method[] argsDestMtd = dest.getClass().getDeclaredMethods();

//frm中方法名称
String frmMtdName;
//方法描述 包括修饰符、返回值、方法名、参数
String frmGeneric;
//返回值类型
String returnType;

//dest中方法名称
String destMtdName;
//方法对应的对象名称
String destFieldName;
//方法描述 包括修饰符、返回值、方法名、参数
String destGeneric;
//参数类型
String paramType;

//便利dest对象中的方法
for(Method destMtd : argsDestMtd){
destMtdName = destMtd.getName(); //获得方法名称

if(destMtdName.startsWith("set")){ //判断方法是否为setter方法
destFieldName = destMtdName.replace("set", ""); //取得变量名称(即去掉setter方法中的“set”)
destGeneric = destMtd.toGenericString(); //取得方法描述 包括修饰符、返回值、方法名、参数
paramType = destGeneric.split(destMtdName)[1]; //取得方法名称之后的字符串
paramType = paramType.substring(1,paramType.length()-1); //去掉左右括号 得到参数类型

//便利frm对象中的方法
for(Method frmMtd : argsFrmMtd){
frmMtdName = frmMtd.getName(); //获得方法名称

//判断frmMtdName方法是否为getter方法并且变量名称(第一个字母)等于frm中的对象名称
if(frmMtdName.startsWith("get") && frmMtdName.replace("get", "").equals(destFieldName)){
frmGeneric = frmMtd.toGenericString(); //获得getter方法的返回值
//取得以空格split后数组倒数第一个字符串,即方法的返回值
returnType = frmGeneric.split(" ")[frmGeneric.split(" ").length - 2];

//判断frm中getter方法的返回值类型是否等于dest对象中变量的setter方法的参数类型
if(paramType != null && paramType.equals(returnType)){
//将frm对象中getter方法的返回值为参数调用dest对象中同名变量的setter方法
destMtd.invoke(dest, frmMtd.invoke(frm, (Object[])null));
}
}
}
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值