
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 }