现在的位置: 首页 > 综合 > 正文

java 反射机制应用的封装

2018年03月31日 ⁄ 综合 ⁄ 共 4226字 ⁄ 字号 评论关闭

                                                                                
java反射机制应用的封装

    java里面有反射机制  可能不怎么常用  今天对反射进行学习了一下  并封装了一个操作类

    /**     
        * 得到某个对象的公共属性     
        *     
        * @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;
       }
}

抱歉!评论已关闭.