把一个对象中的属性值赋值到另外一个对象中

      需求:当一个对象保存到数据库中的时候,此时,此对象只包含部分属性。其他的属性依旧不变(其他修改操作会改变)。我们需要把确认要改变的属性赋值到需要改变的新的对象中。以此保存数据。字段少还好说,字段较多那么就麻烦大了。如果此种需求很大。那么就更废了。更不用说可能需要改变部分字段(添加,减少)是否在修改中。只能重新找,然后修改。太麻烦了。

     那么,我们怎么做呢?用反射。以前也用过反射,只是没有做一个记录备案。现在,弄出来吧。下次直接拷贝就好了。直接上代码。

/**
     * 两个对象之间的赋值
     * @param source 来源对象
     * @param dest 去处对象
     * @return 去除对象
     * @throws IllegalAccessException
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     */
    public static Object getAttribute(Object source,Object dest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Field[] declaredFields = source.getClass().getDeclaredFields();
        LinkedHashMap<String,Object> hashMap = new LinkedHashMap<>();
        for(Field f:declaredFields){
            //打开私有访问
            f.setAccessible(true);
            //获取属性
            String name = f.getName();
            if(name!="username"){
                if(f.get(source)!=null) {
                    String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
                    Method method = source.getClass().getMethod(methodName, f.getType());
                    method.invoke(dest, f.get(source));
                }
            }
        }
        return dest;

解释:反射的方法不解释了。这个已经记住了。但是,获取Method的方法并没有记者。在此打一下,增加记忆。

source.getClass().getMethod(methodName,'methodName的方法的参数类型');

method.invoke('去除的对象',"属性值")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值