1 import java.lang.reflect.Field; 2 import java.lang.reflect.Method; 3 import java.util.Date; 4 5 public class CopyBean{ 6 7 /** 8 * 复制sour里属性不为空的值到obje为空的属性 9 * 10 * @param obje 11 * 目标实体类 12 * @param sour 13 * 源实体类 14 * @param isCover 15 * 是否保留obje类里不为null的属性值(保留源值,属性为null则赋值) 16 * @return obje 17 */ 18 public static Object Copy(Object obje, Object sour, boolean isCover) { 19 Field[] fields = sour.getClass().getDeclaredFields(); 20 for (int i = 0, j = fields.length; i < j; i++) { 21 String propertyName = fields[i].getName(); 22 Object propertyValue = getProperty(sour, propertyName); 23 if (isCover) { 24 if (getProperty(obje, propertyName) == null 25 && propertyValue != null) { 26 Object setProperty = setProperty(obje, propertyName, 27 propertyValue); 28 } 29 } else { 30 Object setProperty = setProperty(obje, propertyName, 31 propertyValue); 32 } 33 34 } 35 return obje; 36 } 37 38 /** 39 * 得到值 40 * 41 * @param bean 42 * @param propertyName 43 * @return 44 */ 45 private static Object getProperty(Object bean, String propertyName) { 46 Class clazz = bean.getClass(); 47 try { 48 Field field = clazz.getDeclaredField(propertyName); 49 Method method = clazz.getDeclaredMethod( 50 getGetterName(field.getName()), new Class[] {}); 51 return method.invoke(bean, new Object[] {}); 52 } catch (Exception e) { 53 } 54 return null; 55 } 56 57 /** 58 * 给bean赋值 59 * 60 * @param bean 61 * @param propertyName 62 * @param value 63 * @return 64 */ 65 private static Object setProperty(Object bean, String propertyName, 66 Object value) { 67 Class clazz = bean.getClass(); 68 try { 69 Field field = clazz.getDeclaredField(propertyName); 70 Method method = clazz.getDeclaredMethod( 71 getSetterName(field.getName()), 72 new Class[] { field.getType() }); 73 return method.invoke(bean, new Object[] { value }); 74 } catch (Exception e) { 75 } 76 return null; 77 } 78 79 /** 80 * 根据变量名得到get方法 81 * 82 * @param propertyName 83 * @return 84 */ 85 private static String getGetterName(String propertyName) { 86 String method = "get" + propertyName.substring(0, 1).toUpperCase() 87 + propertyName.substring(1); 88 return method; 89 } 90 91 /** 92 * 得到setter方法 93 * 94 * @param propertyName 95 * 变量名 96 * @return 97 */ 98 private static String getSetterName(String propertyName) { 99 String method = "set" + propertyName.substring(0, 1).toUpperCase() 100 + propertyName.substring(1); 101 return method; 102 } 103 104 // public static void main(String[] args) { 105 // User u = new User(); 106 // u.setId(1l); 107 // u.setAge(30); 108 // User u1 = new User(); 109 // u1.setAge(10); 110 // u1.setBirthday(new Date()); 111 // u1.setFirtsName("aaaa"); 112 // u1.setName("adf"); 113 // u1.setSchool("aaaa"); 114 // Field[] fields = u1.getClass().getDeclaredFields(); 115 // u.setSchool("bbbbbbbbb"); 116 // System.out.println("u1---------> " + u1); 117 // System.out.println("u----------> " + u); 118 // System.out.println(Copy(u, u1, false)); 119 // } 120 121 }