一些反射调用的方法
程序员文章站
2022-07-11 10:37:27
...
/** * 反射调用某方法得到所需要的值(Object需要强制转型)get the returned object by reflection without parameters * <p> * 需要注意的是这种方法是无参构造器,并且调用的是无参方法 * * @param className * 要调用的类 the class which has a method named the methodName you give * @param methodName * 要掉用该类里的这个方法 the name of the method * @return * @throws Exception */ public static Object getMethodReturnObject(String className, String methodName) throws Exception { return getMethodReturnObject(className, methodName, null, null); }
/** * 反射调用某静态方法得到所需要的值(Object需要强制转型)get the returned object by reflection without parameters * <p> * 需要注意的是这种方法是无参构造器,并且调用的是无参方法,静态方法 * * @param className * 要调用的类 the class which has a method named the methodName you give * @param methodName * 要掉用该类里的这个方法 the name of the method * @return * @throws Exception */ public static Object getStaticMethodReturnObject(String className, String methodName) { return getStaticMethodReturnObject(className, methodName, null, null); }
public static Object getStaticMethodReturnObject(String className, String methodName, Class<?>[] parameterTypes, Object[] args) { try { Class<?> clazz = Class.forName(className); Method method = clazz.getMethod(methodName, parameterTypes); Object object = method.invoke(null, args); return object; } catch (Exception e) { LogHelper.d(TAG, LogHelper.getThreadName() + "Exception=" + e.getMessage()); e.printStackTrace(); } return null; }
/** * 反射调用某方法得到所需要的值(Object需要强制转型)get the returned object by reflection without parameters * <p> * 这种方法是可以使用有参的构造器,但是调用的方法是无参的 * * @param className * 要调用的类 the class which has a method named the methodName you give,may be a abstract class like Context * @param instance * 要调用的类的实例,该实例可以是带有参数的实例,也可以是无参的实例 the instance of the giving className like context * @param methodName * 要掉用该类里的这个方法 the name of the method * @throws Exception */ public static Object getMethodReturnObject(String className, Object instance, String methodName) throws Exception { return getMethodReturnObject(className, instance, methodName, null, null); }
/** * 反射调用某方法得到所需要的值(Object需要强制转型),注意这种方式得到的构造器是无参的构造器 * <p> * 如果该类找不到无参的构造器将会抛出异常 * * @param className * 要调用的类 * @param methodName * 要掉用该类里的这个方法 * @param parameterTypes * 方法对应的参数类型 * @param args * 方法的参数实际的值 * @return * @throws Exception */ public static Object getMethodReturnObject(String className, String methodName, Class<?>[] parameterTypes, Object[] args) throws Exception { Class<?> classes = Class.forName(className); Object instance = classes.newInstance(); Method method = classes.getMethod(methodName, parameterTypes); Object roProductManufacturer = method.invoke(instance, args); return roProductManufacturer; }
/** * 反射调用某方法得到所需要的值(Object需要强制转型) * <p> * 如果该类找不到无参的构造器将会抛出异常 * * @param className * 要调用的类 * @param instance * 要调用的类的实例,该实例可以是带有参数的实例,也可以是无参的实例 * @param methodName * 要掉用该类里的这个方法 * @param parameterTypes * 方法对应的参数类型 * @param args * 方法的参数实际的值 * @return * @throws Exception */ public static Object getMethodReturnObject(String className, Object instance, String methodName, Class<?>[] parameterTypes, Object[] args) throws Exception { Class<?> classes = Class.forName(className); if (instance == null) { throw new Exception("-----------反射获取类实例:" + className + "失败,返回"); } Method method = classes.getMethod(methodName, parameterTypes); Object roProductManufacturer = method.invoke(instance, args); return roProductManufacturer; }
推荐阅读
-
C#高效反射调用方法类实例详解
-
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
-
js调用设备摄像头的方法
-
node.js调用Chrome浏览器打开链接地址的方法
-
Python实现调用另一个路径下py文件中的函数方法总结
-
javascript中一些奇葩的日期换算方法总结
-
Unity3D中自动调用的方法总结
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
C++ 调用Python3 脚本中无法引入内建模块的问题解决方法
-
Linux系统中与中文显示相关的一些编码设置方法