package org.leno.demo;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method; /** * @author leno * 做一个方法,JavaBean风格对象的属性值可以复制到另一个对象的同名属性中 * (如果没有同名属性,则不复制) */public class BeanUtils { @SuppressWarnings("unchecked") public static void copyProperties(Object target,Object source) throws Exception{ Class类型对象分别获得源对象和目标对象,Class对象是整个反射机制的源头和灵魂! Class对象是在类加载过程中产生的,保存了类的相关属性,构造器,方法等信息 */ Class sourceClz = source.getClass(); Class targetClz = target.getClass(); ///Class对象所表示的所有属性(包括私有属性) Field[] fields = sourceClz.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { String fieldName = fields[i].getName(); Field targetField = null; try { ///得到targetClz对象所表示的类别称为fieldName属性,如果不存在,就进入下一个循环 targetField = targetClz.getDeclaredField(fieldName); } catch (SecurityException e) { e.printStackTrace(); break; } catch (NoSuchFieldException e) { continue; } ///判断sourceClz字段类型和targetClz同名字段类型是否相同 if(fields[i].getType()==targetField.getType()){ ///通过属性名获得相应的get和set方法的名称 String getMethodName = "get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); String setMethodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); ///Method对象通过方法的名称获得 Method getMethod; try { getMethod = sourceClz.getDeclaredMethod(getMethodName, new Class[]{}); Method setMethod = targetClz.getDeclaredMethod(setMethodName, fields[i].getType()); ////调用source对象的getmethod方法 Object result = getMethod.invoke(source, new Object[]{}); ////调用target对象的setmethod方法 setMethod.invoke(target, result); } 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(); } }else{ throw new Exception(“同名属性类型不匹配!"); } } } }
本文是转载内容,我们尊重原作者对文章的权利。如有内容错误或侵权行为,请联系我们更正或删除文章。