Java用Field实现对象的拷贝,遍历对象字段、取值赋值

来源:互联网 发布:最新彩票开奖网站源码 编辑:程序博客网 时间:2024/06/18 05:13

话不多说,上代码,小人拙见,不足之处望见谅!
public String 方法名(参数) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException {
List list=XXX;
Model2 model2;
for (Model1 model1: list) {
model2= new Model2();
Field[] field1 = model1.getClass().getDeclaredFields();
Field[] field2 = model2.getClass().getDeclaredFields();
//循环遍历获取model1和model2中相同的字段
for (int i = 0; i < field1.length; i++) {
for (int j = 0; j < field2.length; j++) {
//设置可以获取私有属性
field1[i].setAccessible(true);
field2[j].setAccessible(true); if(field1[i].getName().equals(field2[j].getName())) {
String name1 = field1[i].getName();
String name2 = field2[j].getName();
//将首字母大写
name1 = name1.replaceFirst(name1.substring(0, 1), name1.substring(0, 1).toUpperCase());
String type = field1[i].getGenericType().toString();
Method m1 = model1.getClass().getMethod(“get” + name1, null);
//对不同参数类型进行分别处理
if (type.equals(“class java.lang.String”)) {
// 如果type是类类型,则前面包含”class “,后面跟类名
String value1 = (String) m1.invoke(model1);
Field field = model2.getClass().getDeclaredField(name2);
field.setAccessible(true);
field.set(model2, value1);
}
if (type.equals(“class java.lang.Integer”)) {
Integer value1 = (Integer) m1.invoke(model1);
Field field = model2.getClass().getDeclaredField(name2);
field.setAccessible(true);
field.set(model2, value1);
}
if (type.equals(“class java.lang.Double”)) {
Double value1 = (Double) m1.invoke(model1)
Field field = model2.getClass().getDeclaredField(name2);
field.setAccessible(true);
field.set(model2, value1);
}
if (type.equals(“class java.util.Date”)) {
Date value1 = (Date) m1.invoke(model1);
Field field = model2.getClass().getDeclaredField(name2);
field.setAccessible(true);
field.set(model2, value1);
}
}
}
}
}
}
一定要抛异常。
同类实现方法可以用BeanUtils.copyProperties(newObject,oldObject),实现对象的拷贝(后付前)。

0 0