Java反射机制操作对象赋值

Java反射机制操作对象赋值

实际业务情景:现在需要对两个字段相同的表(不止这一对表,还有甚多,所以通过反射写一个通用的方法)操作,将table1 set table2,我们通过java bean 的反射机制,将mapping的java bean通过反射帮我们完成这个需求。
下面呢我们创建两个与table 对应 bean1,bean2

bean1:BatchResultBean

package com.milo.entity;
import java.sql.Timestamp;

public class BatchResultBean{
    String id;

    String progName;

    String fileType;

    Timestamp startTime;

    Timestamp endTime;

    String workFg;

    String dataSource;

    String importSource;

    String fileName;

    Long fileSeq;

    Long totalCount;

    Long totalAmount;

    String rCode;

    String remark;

    Timestamp authStartTime;

    Timestamp authEndTime;

    String updUser;

    Timestamp updDate;

    //getting setting 省略。。。
}

bean2:BatchResultBean2

package com.milo.entity;
import java.sql.Timestamp;

public class BatchResultBean2{
    String id;

    String progName;

    String fileType;

    Timestamp startTime;

    Timestamp endTime;

    String workFg;

    String dataSource;

    String importSource;

    String fileName;

    Long fileSeq;

    Long totalCount;

    Long totalAmount;

    String rCode;

    String remark;

    Timestamp authStartTime;

    Timestamp authEndTime;

    String updUser;

    Timestamp updDate;

    //getting setting 省略。。。
}

接下来我们开始写Java code

package com.milo.entity;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Timestamp;

public class DemoTest {
    public void mainTest(Object setBean,Object getBean) {
        Field[] setfield = setBean.getClass().getDeclaredFields();
        try {
             for (int j = 0; j < setfield.length; j++) { // 遍历所有属性
                    String name = setfield[j].getName(); // 获取属性的名字
                    name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
                    Method getMethod = getBean.getClass().getMethod("get" + name);
                    Object value =  getMethod.invoke(getBean); // 调用getter方法获取属性值

                    Method setMethod = setBean.getClass().getMethod("set" + name,setfield[j].getType());// 调用setting方法获取属性值 setfield[j].getType():获取接收类型
                    setMethod.invoke(setBean, value);
                    }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        DemoTest bean=new DemoTest();
        BatchResultBean batchResultBean = new BatchResultBean();
        BatchResultBean2 batchResultBean2 = new BatchResultBean2();
        String tsStr = "2017-05-09 11:49:45";  
        Timestamp ts = Timestamp.valueOf(tsStr);  // 2017-05-09 11:49:45.0  
        batchResultBean2.setId("1234");
        batchResultBean2.setUpdDate(ts);
        bean.mainTest(batchResultBean,batchResultBean2);
        System.out.println("BatchResultBean-->:"+batchResultBean.getId()+"--"+batchResultBean.getUpdDate());
    }

}

还有其他关于反射源代码:

http://download.csdn.net/download/qq_23315711/10131316

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OOEM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值