Java反射工具類

f25p 9年前發布 | 2K 次閱讀 Java

    import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Reflection {  
    /**      
        * 得到某個對象的公共屬性      
        *      
        * @param owner, fieldName      
        * @return 該屬性對象      
        * @throws Exception      
        *      
        */        
       public Object getProperty(Object owner, String fieldName) throws Exception {         
           Class ownerClass = owner.getClass();         

           Field field = ownerClass.getField(fieldName);         

           Object property = field.get(owner);         

            return property;         
        }         

        /**      
        * 得到某類的靜態公共屬性      
        *      
        * @param className   類名      
        * @param fieldName   屬性名      
        * @return 該屬性對象      
        * @throws Exception      
        */        
       public Object getStaticProperty(String className, String fieldName)         
               throws Exception {         
           Class ownerClass = Class.forName(className);         

           Field field = ownerClass.getField(fieldName);         

           Object property = field.get(ownerClass);         

           return property;         
        }         


        /**      
        * 執行某對象方法      
        *      
        * @param owner      
        *            對象      
        * @param methodName      
        *            方法名      
        * @param args      
        *            參數      
        * @return 方法返回值      
        * @throws Exception      
        */        
       public Object invokeMethod(Object owner, String methodName, Object[] args)         
               throws Exception {         

           Class ownerClass = owner.getClass();         

           Class[] argsClass = new Class[args.length];         

           for (int i = 0, j = args.length; i < j; i++) {         
               argsClass[i] = args[i].getClass();         
           }         

           Method method = ownerClass.getMethod(methodName, argsClass);         

           return method.invoke(owner, args);         
       }         


         /**      
        * 執行某類的靜態方法      
        *      
        * @param className      
        *            類名      
        * @param methodName      
        *            方法名      
        * @param args      
        *            參數數組      
        * @return 執行方法返回的結果      
        * @throws Exception      
        */        
       public Object invokeStaticMethod(String className, String methodName,         
               Object[] args) throws Exception {         
           Class ownerClass = Class.forName(className);         

           Class[] argsClass = new Class[args.length];         


           for (int i = 0, j = args.length; i < j; i++) {         
               argsClass[i] = args[i].getClass();         
           }         

           Method method = ownerClass.getMethod(methodName, argsClass);         

           return method.invoke(null, args);         
       }         



        /**      
        * 新建實例      
        * @param className  類名   
        * @param args    構造函數的參數    
        * 如果無構造參數,args 填寫為 null   
        * @return 新建的實例      
        * @throws Exception      
        */        
       public Object newInstance(String className, Object[] args,Class[] argsType) throws NoSuchMethodException, SecurityException, ClassNotFoundException,   
       InstantiationException, IllegalAccessException,   
       IllegalArgumentException, InvocationTargetException   
 {         
           Class newoneClass = Class.forName(className);         

           if(args == null){     
               return newoneClass.newInstance();     

          }else{     
//             Class[] argsClass = new Class[args.length];         
//  
//             for (int i = 0, j = args.length; i < j; i++) {         
//                 argsClass[i] = args[i].getClass();         
//             }         
//  
//             Constructor cons = newoneClass.getConstructor(argsClass);    
              Constructor cons = newoneClass.getConstructor(argsType);  

               return cons.newInstance(args);        
           }     

       }         



        /**      
        * 是不是某個類的實例      
        * @param obj 實例      
        * @param cls 類      
        * @return 如果 obj 是此類的實例,則返回 true      
        */        
       public boolean isInstance(Object obj, Class cls) {         
           return cls.isInstance(obj);         
       }         

        /**      
        * 得到數組中的某個元素      
        * @param array 數組      
        * @param index 索引      
        * @return 返回指定數組對象中索引組件的值      
        */        
       public Object getByArray(Object array, int index) {         
           return Array.get(array,index);         
       }    

       public Class<?> GetClassListByPackage(String pPackage) {  
           Package _Package = Package.getPackage(pPackage);  
           Class<?> _List =   _Package.getClass();  

           return _List;  
       }  
}  </pre> 


 本文由用戶 f25p 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!