反射工具类

来源:互联网 发布:绘画app 知乎 编辑:程序博客网 时间:2024/05/12 05:20
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;   }}

0 0