1 /**
2 * 将源表的属性赋值到目标表中,目标表中的字段必须在源表中存在
3 *
4 * @param des
5 * 目标表
6 * @param src
7 * 源表
8 */
9 public static void copyPropertys(Object des, Object src) {
10 Class<?> srcClass = src.getClass();//返回实体类
11 Field[] desFields = des.getClass().getDeclaredFields();//返回此类的所有字段组成的字段数组
12 Field f;
13 //循环
14 for (Field field : desFields) {
15 if (field.getName().equals("serialVersionUID")) {//序列化id
16 continue;
17 }
18 try {
19 //将源对象的超类中的成员变量中的值set进对应的目标对象
20 try {
21 f = srcClass.getSuperclass().getDeclaredField(//得到父类的所有字段组成的字段数组
22 field.getName());
23 f.setAccessible(true);//取消java语言访问检查(在反射的时候如果类的成员变量为private的时候必须设置)
24 field.setAccessible(true);
25 Object obj;
26 obj = f.get(src);//得到源对象成员变量f的值
27 if (obj != null) {
28 field.set(des, obj);//向目标对象des的field字段set值obj
29 }
30 } catch (NoSuchFieldException e) {
31 }
32 //将源对象中的成员变量值set进目标对象
33 try {
34 f = srcClass.getDeclaredField(field.getName());
35 f.setAccessible(true);
36 field.setAccessible(true);
37 Object obj;
38 obj = f.get(src);
39 if (obj != null) {
40 field.set(des, obj);
41 }
42 } catch (NoSuchFieldException e) {
43 }
44 } catch (IllegalArgumentException e) {
45 e.printStackTrace();
46 } catch (IllegalAccessException e) {
47 e.printStackTrace();
48 } catch (SecurityException e) {
49 e.printStackTrace();
50 }
51
52 }
53 }