转利用java反射实现两个具有相同属性bean赋值

继续潜水 继续潜水     2022-09-08     563

关键词:

    package com.dobn.bdgcgl.utils;  
      
      
    import java.lang.reflect.Field;  
    import java.lang.reflect.Method;  
      
      
      
      
    public class ClassReflection {  
          
        /** 
         * @param class1 用于赋值的实体类  
         * @param class1 需要待赋值的实体类 
         * @author ym 
         * @CreateTime 2012-11-22下午03:23:23 
         * 描述:反射实体类赋值 
         */  
        public static void reflectionAttr(Object class1,Object class2) throws Exception{  
            Class clazz1 = Class.forName(class1.getClass().getName());  
            Class clazz2 = Class.forName(class2.getClass().getName());  
    //      获取两个实体类的所有属性  
            Field[] fields1 = clazz1.getDeclaredFields();  
            Field[] fields2 = clazz2.getDeclaredFields();  
            ClassReflection cr = new ClassReflection();  
    //      遍历class1Bean,获取逐个属性值,然后遍历class2Bean查找是否有相同的属性,如有相同则赋值  
            for (Field f1 : fields1) {  
                if(f1.getName().equals("id"))  
                    continue;  
                Object value = cr.invokeGetMethod(class1 ,f1.getName(),null);  
                for (Field f2 : fields2) {  
                    if(f1.getName().equals(f2.getName())){  
                        Object[] obj = new Object[1];  
                        obj[0] = value;  
                        cr.invokeSetMethod(class2, f2.getName(), obj);  
                    }  
                }  
            }  
              
        }  
          
        /** 
         *  
         * 执行某个Field的getField方法 
         *  
         * @param clazz 类 
         * @param fieldName 类的属性名称 
         * @param args 参数,默认为null 
         * @return  
         */  
        private Object invokeGetMethod(Object clazz, String fieldName, Object[] args)  
        {  
            String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);  
            Method method = null;  
            try   
            {  
                method = Class.forName(clazz.getClass().getName()).getDeclaredMethod("get" + methodName);  
                return method.invoke(clazz);  
            }   
            catch (Exception e)  
            {  
                e.printStackTrace();  
                return "";  
            }  
        }  
          
        /** 
         *  
         * 执行某个Field的setField方法 
         *  
         * @param clazz 类 
         * @param fieldName 类的属性名称 
         * @param args 参数,默认为null 
         * @return  
         */  
        private Object invokeSetMethod(Object clazz, String fieldName, Object[] args)  
        {         
            String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);  
            Method method = null;  
            try   
            {  
                Class[] parameterTypes = new Class[1];  
                Class c = Class.forName(clazz.getClass().getName());  
                Field field = c.getDeclaredField(fieldName);   
                parameterTypes[0] = field.getType();  
                method = c.getDeclaredMethod("set" + methodName,parameterTypes);  
                return method.invoke(clazz,args);  
            }   
            catch (Exception e)  
            {  
                e.printStackTrace();  
                return "";  
            }  
        }  
      
      
    }  

 

c#用反射实现两个类的对象之间相同属性的值的复制

...写很多行复制语句,麻烦还容易漏掉一些,这个时候可以利用c#的反射来实现复制。我们可以写这样一个利用泛型的映射函数。1.适用于创建实体的时候从一个实体作为数据源赋值///<summary>/ 查看详情

利用java反射实现javabean对象相同属性复制并初始化目标对象为空的属性的beanutils

...数据传输对象转换成JSON串会将属性值为空的属性去掉,利用Java反射实现JavaBean对象数据传输对象的相同属性复制并初始化数据传输对象属性为空的属性,然后转换成JSON串packagecom.banksteel.util;importjava.lang.reflect.Field;importjava.lang.refl... 查看详情

对象bean与map互转问题(代码片段)

...之间进行互转有很多种方式,下面我们一起来梳理一下:利用JSON工具包,将对象转成字符串,之后再转成Map,这种需要转换2次,相对来说效率比较底;利用Java反射,获取Bean类的属性和值,再转换到Map对应的键值对中,相对来... 查看详情

反射-spring管理bean,注入bean属性的反射机制。

...构使用了反射2.JUnit识别被测试方法使用了反射  --JUnit3利用了反射查找test开头的方法  --JUnit4利用了反射解析@Test查找测试方法3.Spring管理Bea 查看详情

如何使用 java 反射自动将值从 java bean 复制到 protobuf 消息对象?

】如何使用java反射自动将值从javabean复制到protobuf消息对象?【英文标题】:howtoautomaticallycopyvaluesfromjavabeantoprotobufmessageobjectusingjavareflection?【发布时间】:2010-10-2916:05:22【问题描述】:通常我可以使用带有java反射的beanutils在两... 查看详情

java使用反射比较两个bean对象属性值是否相等

importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.util.HashMap;importjava.util.Map;importorg.apache.log4j.Logger;publicclassDomainEquals{/***日志操作类*/privatestaticLoggerlogger=Logg 查看详情

两个具有相同属性的类赋值(代码片段)

今天项目中有两个类,其中相同的属性比较多,手动代码量大。借鉴此篇博客https://www.cnblogs.com/gester/p/5816643.html,然后根据自身需求修改了一下,代码如下:  [TestClass]publicclassUnitTest1[TestMethod]publicvoidTestMethod1()varb=newBAge=1,UserNa... 查看详情

利用反射机制实现对象转map集合(代码片段)

分析问题问题主要有以下几点如何获取对象中的属性的名称?如何获取对象的属性值?如何这个属性被private修饰,该如何处理?返回的是一个对象该如何获取对象的属性参数呢?解决问题问题1:可以使用反射来获取POJO对象的get方法... 查看详情

c#通过反射实现两个对象相同属性值的复制(代码片段)

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Security.Permissions;5usingSystem.Data;6usingMySql.Data;7usingSystem.Configuration;8usingSystem.IO;9usingSystem.Text;10usin 查看详情

利用java反射机制实现对象相同字段的复制

一。如何实现不同类型对象之间的复制问题?1、为什么会有这个问题?近来在进行一个项目开发的时候,为了隐藏后端数据库表结构、同时也为了配合给前端一个更友好的API接口文档(swaggerAPI文档),我采用POJO来对应数据表结... 查看详情

c#利用反射给不同类型对象同名属性赋值

publicclassObjectReflection{publicstaticPropertyInfo[]GetPropertyInfos(Typetype){returntype.GetProperties(BindingFlags.Public|BindingFlags.Instance);}publicstaticvoidAutoMapping<S,T>(Ss,Tt){//ge 查看详情

反射比较两个对象属性名相同值不同(代码片段)

概述有时会遇到获取一个class下2个对象相同属性的不同值的属性。方便在页面上展示差异属性,标识个颜色啥的。代码Demopackagexxx.xxx.xxx.xxx;importcom.xxx.xxx.xxx.ProductSkuBaseInfoVO;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.lang3.ArrayU... 查看详情

java反射+注解实现entity类与dto类相互转换

...,现在大部分都是Entity类和Dto类的属性名相同的前提下,利用反射实现,太局限了,如果要改成同名,按目前项目的程度去整改工作量太大,不现实。后面看了Spring注 查看详情

利用反射判断bean属性不为空(null和空串)(代码片段)

/***@paramobject*@Description判断是否位空对象*@Authorvioking*@Date18-12-26下午12:12*@Returnboolean*/privatebooleanisNotNullObject(Objectobject)throwsIllegalAccessExceptionif(null==object)returnfalse;Field[]fields=object.getClass().getDeclaredFields();for(Fieldfield:fields)field.setAccessib... 查看详情

java中map和对象互转工具类的实现示例

...96061626364656667686970717273747576777879/**     *利用反射将map集合封装成bean对象     *     *@paramparams     *@paramclazz   & 查看详情

反射机制补充(代码片段)

1.通过反射机制访问一个java对象的属性packagecom.bjpowernode.java.reflect;importcom.bjpowernode.java.bean.Student;importjava.lang.reflect.Field;/*必须掌握:怎么通过反射机制访问一个java对象的属性?给属性赋值set获取属性的值get*/publicclass 查看详情

java反射反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个list集合内对象的属性值是否发生变更(代码片段)

java的反射实现:判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码:packagecom.sxd.streamTest;importjava.lang.reflect.Field;importjava.util.*;/***@ClassNameTest*@Description判断... 查看详情

beanutils.copyproperties()用法

...nbsp;BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码... 查看详情