反射机制----BeanUtils编程参考工程Test_java 复杂

package cn.veryedu.util;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class BeanUtile3 {
	public void copyeProperties(Object tagert,Object source){
		Class s =source.getClass();
		Class t = tagert.getClass();
		Field[] sf=s.getDeclaredFields();
		Field f=null;
		Field t_f=null;
		for(int i=0;i<sf.length;i++){
			f=sf[i];
			String sname=f.getName(); System.out.println(sname);
			t_f=getTagertField( t, sname);
			if(t_f==null||!f.getType().equals(t_f.getType())){
				continue;
			}
			else{
				
				//拷贝
				CopyPerperties(f,source, t_f, tagert);
			}
		}
	}
	public Field getTagertField(Class t,String sname){
		Field t_f=null;
		try {
			t_f=t.getDeclaredField(sname);
		} catch (SecurityException e) {
			return null;
		} catch (NoSuchFieldException e) {
			return null;
		}
		return t_f;
	}
	public void CopyPerperties(Field f,Object source,Field t_f,Object tagert){
		String getMethodName=createMethodName("get",f);
		Object value=getFieldValue(source,getMethodName);
		setFieldValue(t_f,tagert,value);
	}
	public void setFieldValue(Field t_f,Object tagert,Object value){
		String getMethodName=createMethodName("set",t_f);
		Class clazz=tagert.getClass();
		Object result=null;
		try {
			Method getMethod=clazz.getMethod(getMethodName, new Class[]{t_f.getType()});
			result=getMethod.invoke(tagert, value);
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public Object getFieldValue(Object source,String getMethodName){
		Class clazz=source.getClass();
		Object result=null;
		try {
			Method getMethod = clazz.getMethod(getMethodName, null);
			result = getMethod.invoke(source, null);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
	public String createMethodName(String option,Field f){
		String fName=f.getName();
		String first =fName.substring(0,1);//将首字母改大写
		first =first.toUpperCase();
		fName=first +fName.substring(1, fName.length());
		return option+fName;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值