轉 利用java反射實現兩個具有相同屬性bean賦值



    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 "";  
            }  
        }  
      
      
    }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM