java 两个类复制_两个实体类 复制 copy 工具类

1 importjava.lang.reflect.Field;2 importjava.lang.reflect.Method;3 importjava.util.Date;4

5 public classCopyBean{6

7 /**

8 * 复制sour里属性不为空的值到obje为空的属性9 *10 *@paramobje11 * 目标实体类12 *@paramsour13 * 源实体类14 *@paramisCover15 * 是否保留obje类里不为null的属性值(保留源值,属性为null则赋值)16 *@returnobje17 */

18 public static Object Copy(Object obje, Object sour, booleanisCover) {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 returnobje;36 }37

38 /**

39 * 得到值40 *41 *@parambean42 *@parampropertyName43 *@return

44 */

45 private staticObject 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()), newClass[] {});51 return method.invoke(bean, newObject[] {});52 } catch(Exception e) {53 }54 return null;55 }56

57 /**

58 * 给bean赋值59 *60 *@parambean61 *@parampropertyName62 *@paramvalue63 *@return

64 */

65 private staticObject 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 newClass[] { field.getType() });73 return method.invoke(bean, newObject[] { value });74 } catch(Exception e) {75 }76 return null;77 }78

79 /**

80 * 根据变量名得到get方法81 *82 *@parampropertyName83 *@return

84 */

85 private staticString getGetterName(String propertyName) {86 String method = "get" + propertyName.substring(0, 1).toUpperCase()87 + propertyName.substring(1);88 returnmethod;89 }90

91 /**

92 * 得到setter方法93 *94 *@parampropertyName95 * 变量名96 *@return

97 */

98 private staticString getSetterName(String propertyName) {99 String method = "set" + propertyName.substring(0, 1).toUpperCase()100 + propertyName.substring(1);101 returnmethod;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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值