类和类之间属性复制,必须存在get和set方法的属性才可以复制
2015-09-11 10:38
375 查看
package com.hjzx.common.util; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ModelCopy { /** * 类和类之间属性复制,必须存在get和set方法的属性才可以复制 * @param source 源对象 * @param target 目标对象 * @return */ public static void copy(Object source,Object target){ Field[] fields = source.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { copyField(source,target,fields[i]); } } private static void copyField(Object source,Object target,Field field){ String fieldName = null; String getFieldName = null; String setFieldName = null; Object value = null; try{ fieldName = field.getName(); String mFieldName = fieldName.replaceFirst(fieldName.substring(0,1), fieldName.substring(0,1).toUpperCase()); getFieldName = "get" + mFieldName; Method getMethod = source.getClass().getMethod(getFieldName, new Class[] {}); value = getMethod.invoke(source, new Object[] {}); if(value == null){ return; } setFieldName = "set" + mFieldName; Method setMethod = getMethod(target,setFieldName); if(setMethod == null){ return; } setMethod.invoke(target, new Object[] {value}); }catch(Exception e){ } } private static Method getMethod(Object target,String setFieldName){ Method method = null; Method[] methods = target.getClass().getMethods(); for (int i = 0; i < methods.length; i++) { method = methods[i]; if(method.getName().equals(setFieldName)){ return method; } } return null; } }
相关文章推荐
- 状态机编程
- HttpServletResponse中sendError与setStatus的区别
- 【转】正则表达式入门
- HTML5 的data-* 自定义属性
- [ITU]H.264标准下载地址-HEVC(H.265)标准下载地址-一致性码流下载地址
- Laravel 5.1 中文文档
- lua闭包理解实例
- django 发送邮件的两种方法
- iOS 常用常用的id IDFA IDFV MAC UDID openUDID
- Linux下进程信息分析
- new 修饰符
- Nodejs课堂笔记-第四课 Dynamodb为何物
- cc代码学习笔记1
- Java反射的一个小问题
- MySQL之——Centos中安装多个mysql数据库的配置实例
- 使用ps查看进程的资源占用
- svn修改新url地址方法(linux,windows,centos)
- MySQL查看sql语句运行时间
- ios2048小游戏
- mac上一键配置和安装adb驱动或者环境