在不同模块之间,需要使用其他模块的方法,这个时候就需要用到反射了
示例
模块一操作模块二,即模块一调用模块二中的方法
ReflectUtil.java
/**/** * 反射工具类 */ public class ReflectUtil { public static Class getClass(String name) { Class clazz = null; try { clazz = Class.forName(name); } catch (ClassNotFoundException e) { e.printStackTrace(); } return clazz; } }
模块一
Gjc.java
public class Gjc{ public static void init{ /** * 反射调用无参方法 */ //通过ReflectUtil.getClass拿到反射类 Class uiUtilClass = ReflectUtil.getClass("top.gjc.util.UiUtil"); //如果为null则返回 if (uiUtilClass == null) { LogUtil.e("没有找到top.gjc.util.UiUtil"); return; } try { //通过Class的getDeclaredMethod方法拿到反射方法 Method setUiMethod= uiUtilClass.getDeclaredMethod("setUi"); //获取私有方法,否则会找不到这个方法(也有人说是取消Java语言访问检查,目的是提升反射速度 这个我没有测过) setUiMethod.setAccessible(true); //执行方法(如果该方法没有Class对象则传入null) setUiMethod.invoke(null); } catch (Exception e) { e.printStackTrace(); } /** * 反射调用带参方法 */ //需要传入的参数 int x = 666; int y = 999; //通过ReflectUtil.getClass拿到反射类 Class uiUtilClassTwo = ReflectUtil.getClass("top.gjc.util.UiUtil"); //如果为null则返回 if (uiUtilClassTwo == null) { LogUtil.e("没有找到top.gjc.util.UiUtil"); return; } try { //通过Class的getDeclaredMethod方法拿到反射方法(第一个参数是方法名,后续的是相对应的参数类型) Method dialogResultMethod = uiUtilClassTwo.getDeclaredMethod("dialogResult", int.class, int.class, Activity.class); //获取私有方法,否则会找不到这个方法(也有人说是取消Java语言访问检查,目的是提升反射速度 这个我没有测过) dialogResultMethod.setAccessible(true); //执行方法(多参数时(第一个参数是执行该方法的Class对象(如果没有传null即可),后面参数是执行该方法时传入的实参) dialogResultMethod.invoke(null, x, y, activity); } catch (Throwable e) { e.printStackTrace(); } } }
模块二
UiUtil.java
public class UiUtil{ public static void setUi() { DialogManager.setText(); } public static void dialogResult(int x, int y, Activity activity) { DialogManager.dialogResult(x, y, activity); } }
DialogManager.java
public class DialogManager{ public static void setText() { /** * 具体操作 */ } public static void dialogResult(int x, int y, Activity activity) { /** * 具体操作 */ } }