java反射学习四

来源:互联网 发布:e卡销官网源码 编辑:程序博客网 时间:2024/06/05 16:51

从这一部分开始我们学习java反射的实际运用,在一些大型与数据库有关的项目中经常会用到java的反射,例如以前做过的一个保险项目,坐席接到电话进行录单操作,最后录单完成后点击保存会将页面上录入的数据保存到数据库中一系列表中,暂且用T来表示这一套表。然后清分系统会将T表数据通过JMS清分到相应的分公司,然后分公司进行交费操作,交费成功后分公司清分程序又会将所有的见费数据上传到总公司。最后总公司接到交费成功的标志后进行转数操作,转数也就是将所有T表的数据复制到C表中。完成这个功能有两种方法,一是直接对每个C表对象进行set操作,将T表对象的相应值赋进去,如果表比较多,这部分的代码会非常多,所以不可取。另一种就是利用反射来实现。现在我们看看如何利用反射来实现对象的复制操作。

1、源对象

package com.reflectcopy.dto;import java.io.Serializable;/** * 这个表用来模拟T表对象 * @author ibm * */public class TModel implements Serializable{private static final long serialVersionUID = 1L;private int id;private String name;private String pass;private String sex;public TModel(){}//使用反射必须要显示声明一个无参的构造方法public TModel(int id, String name, String pass, String sex) {super();this.id = id;this.name = name;this.pass = pass;this.sex = sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}

2、目标对象

package com.reflectcopy.dto;import java.io.Serializable;/** * 这个类用来模拟C表的对象 * @author ibm * */public class CModel implements Serializable{private static final long serialVersionUID = 1L;private int id;private String name;private String pass;private String sex;public CModel(){}//使用反射必须要显示声明一个无参的构造方法public CModel(int id, String name, String pass, String sex) {super();this.id = id;this.name = name;this.pass = pass;this.sex = sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}

3、测试类

package com.reflectcopy.test;import java.lang.reflect.Field;import java.lang.reflect.Method;import com.reflectcopy.dto.CModel;import com.reflectcopy.dto.TModel;public class ReflectCopyTest {public Object copy(Object sourceObject , Class targetObject) throws Exception {// 获得对象的类型Class<?> sourceclassType = sourceObject.getClass();Class<?> targetclassType = targetObject;// 通过默认构造方法创建一个新的对象Object objectCopy = targetclassType.getConstructor(new Class[] {}).newInstance();// 获得对象的所有属性Field fields[] = targetclassType.getDeclaredFields();for (int i = 0; i < fields.length; i++) {Field field = fields[i];String fieldName = field.getName();if(!fieldName.equals("serialVersionUID")){//去年序列化字段的赋值String firstLetter = fieldName.substring(0, 1).toUpperCase();// 获得和属性对应的getXXX()方法的名字String getMethodName = "get" + firstLetter + fieldName.substring(1);// 获得和属性对应的setXXX()方法的名字String setMethodName = "set" + firstLetter + fieldName.substring(1);// 获得和属性对应的getXXX()方法Method getMethod = sourceclassType.getMethod(getMethodName, new Class[] {});// 获得和属性对应的setXXX()方法Method setMethod = targetclassType.getMethod(setMethodName, new Class[] { field.getType() });// 调用原对象的getXXX()方法Object value = getMethod.invoke(sourceObject, new Object[] {});// 调用拷贝对象的setXXX()方法setMethod.invoke(objectCopy, new Object[] { value });}}return objectCopy;}public static void main(String[] args) throws Exception {TModel tModel = new TModel(1,"test","password","男");CModel cModel = (CModel) new ReflectCopyTest().copy(tModel,CModel.class);System.out.println("Copy information:" + cModel.getId() + " " + cModel.getName() + " " + cModel.getPass() + " " + cModel.getSex());}}

更多文章见:http://www.16boke.com

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子在学校偷钱怎么办 房间墙壁上到处有湿虫怎么办 买了西晒的房子怎么办 墙面瓷砖下水管漏水怎么办 西晒房间开空调没效果怎么办 墙纸被小孩画了怎么办 集成墙板缝隙大怎么办 高血压变低血压怎么办会恢复吗 总是感觉睡不够好困怎么办 两岁宝宝说有鬼怎么办 阳台改成了卧室晒衣服怎么办 室外墙角边墙泥受潮脱落怎么办 新房装修墙体发霉了怎么办 宝宝吃多了发烧怎么办 宝宝睡觉不爱盖被子怎么办 1岁宝宝不盖被子怎么办 2岁宝宝不盖被子怎么办 买的芬琳漆不够刷的怎么办 1.3米宽厨房门怎么办 墙面漆颜色刷深了怎么办 地板上沾了墙漆怎么办 孩子连发高烧8天了怎么办 孩子对数字不敏感怎么办 三岁宝宝不爱学习怎么办 5岁还不认识数字怎么办 小孩上中班还不认识数字怎么办 中班小孩数字都不认识怎么办 中班小孩记不住数字怎么办 中班小孩不肯练数字描红怎么办 2个月吃母乳婴儿缺钙怎么办 月经期接吻水多怎么办 4岁宝宝晚上尿多怎么办 2岁宝宝晚上尿多怎么办 3岁宝宝晚上尿多怎么办 宝宝拉肚子拉绿色的屎怎么办 婴儿吃奶粉大便干燥怎么办 母乳宝宝不拉大便怎么办 我儿子8岁拉肚子怎么办 1岁宝宝经常便秘怎么办 两个月宝宝拉水怎么办 宝宝吃奶粉上火便秘怎么办