通过Java的反射机制实现对象的拷贝

来源:互联网 发布:oppo网络销售授权书 编辑:程序博客网 时间:2024/05/21 10:55

package com.wxh.reflect2;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * 通过Java的反射机制实现对象的拷贝 * @author Administrator * */public class ObjectCopy {public static Object copy(Object source){//创建一个新的对象(空对象)Object target=null;try {Class clz=source.getClass();//获取源对象的class对象target=clz.newInstance();//源对象必须有空的构造器//获取类中的所有属性Field[] fields=clz.getDeclaredFields();for (Field field : fields) {//获取属性名String fieldName=field.getName();//根据属性名称获取setter/getter方法名String set="set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);String get="get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);//根据方法名称获取方法对象Method method_set=clz.getMethod(set, field.getType());Method method_get=clz.getMethod(get);//执行源对象的get方法,获取返回值Object returnVal=method_get.invoke(source);//执行目标对象的set方法,将源对象方法的返回值作为参数设置给目标对象method_set.invoke(target, returnVal);}} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}return target;}}

注意:创建的JavaBean必须要规范,有空的构造器和set、get方法。


0 0