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());
}
}
还有其他关于反射源代码: