利用反射,copy bean

本文介绍了一种在Java中实现对象复制的方法,通过反射获取源对象的所有字段,并将这些字段的值复制到目标对象中,前提是两个对象具有相同的字段名。此方法适用于继承体系中的对象复制,能有效处理相同key的value复制。
摘要由CSDN通过智能技术生成

作用:copy继承类里面的相同key的value

public class BeanUtils{

 	public static void copy(Object c, Object c2) {
        if (c != null && c2 != null) {
            List<Field> fieldList = ReflectionUtils.getDeclaredFields(c);
            Iterator var3 = fieldList.iterator();

            while(var3.hasNext()) {
                Field field = (Field)var3.next();
                Object value = ReflectionUtils.getFieldValue(c2, field.getName());
                if (value != null) {
                    ReflectionUtils.setFieldValue(c, field.getName(), value);
                }
            }

        }
    }
}
public class ReflectionUtils {
 	public static List<Field> getDeclaredFields(Object object) {
        List<Field> fieldList = new ArrayList();

        for(Class clazz = object.getClass(); clazz != Object.class; clazz = clazz.getSuperclass()) {
            try {
                fieldList.addAll(new ArrayList(Arrays.asList(clazz.getDeclaredFields())));
            } catch (Exception var4) {
            }
        }

        return fieldList;
    }

	public static Object getFieldValue(Object object, String fieldName) {
        Field field = getDeclaredField(object, fieldName);
        if (field == null) {
            return null;
        } else {
            field.setAccessible(true);

            try {
                return field.get(object);
            } catch (Exception var4) {
                var4.printStackTrace();
                return null;
            }
        }
    }

	public static void setFieldValue(Object object, String fieldName, Object value) {
        Field field = getDeclaredField(object, fieldName);
        if (field != null) {
            field.setAccessible(true);

            try {
                if (field.getType().isPrimitive()) {
                    if (field.getType().equals(value.getClass())) {
                        field.set(object, value);
                    }
                } else if (field.getType().isAssignableFrom(value.getClass())) {
                    field.set(object, value);
                }
            } catch (IllegalArgumentException var5) {
                var5.printStackTrace();
            } catch (IllegalAccessException var6) {
                var6.printStackTrace();
            }

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值