1. 程式人生 > >Java中反射實現Bean轉化

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();  
    //      遍歷class1Bean,獲取逐個屬性值,然後遍歷class2Bean查詢是否有相同的屬性,如有相同則賦值  
            for (Field f1 : fields1) {    
                Object value = invokeGetMethod(class1 ,f1.getName(),null);  
                for (Field f2 : fields2) {  
                    if(f1.getName().equals(f2.getName())){  
                        Object[] obj = new Object[1];  
                        obj[0] = value;  
                        invokeSetMethod(class2, f2.getName(), obj);  
                    }  
                }  
            }  
              
        }  
          
        /** 
         *  
         * 執行某個Field的getField方法 
         *  
         * @param clazz 類 
         * @param fieldName 類的屬性名稱 
         * @param args 引數,預設為null 
         * @return  
         */  
        private static 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 static 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 "";  
            }  
        }  
      
      
    }