在开发组件化项目中,遇到一个这样的问题,两个不同的Module相互之间没有任何直接依赖关系,现在需求是需要在Module_A中调用Module_B中的某个类的方法,以下为解决此问题的方法;
采用的核心技术:路由、反射;
解决问题的过程,首先将需要调用的类通过路由注册,注册到路由中心,这里讲Module_B中的类注册到了路由中心,在Module_A中首先先通过路由中心获取到已经注册了的Module_B的类,获取到Class后通过反射原理获取当前对象实例,然后继续通过反射调用调用当前实例对象的对应方法(支持无参方法及有参方法),至此调用方法已实现,具体示例如下:1、路由注册工具类:/*** Class类路由注册工具类
* Created by sun.li on 2018/7/6.
*
*@authorsun.li*/
public class RouterClassUtil implements RouterInter>{private ConcurrentHashMap> mClassZ = newConcurrentHashMap();private ConcurrentHashMap mClassA = newConcurrentHashMap();private staticRouterClassUtil mInstance;privateRouterClassUtil() {
}public staticRouterClassUtil getInstance() {if(null ==mInstance) {synchronized(RouterActivity.class) {if(null ==mInstance) {
mInstance= newRouterClassUtil();
}
}
}returnmInstance;
}
@Overridepublic voidrouterT(String key, Object obj) {
Object cacheActivity= this.mClassA.get(key);if(null == cacheActivity || obj !=cacheActivity) {this.mClassA.put(key, obj);
}
}
@OverridepublicObject invokT(String key) {return this.mClassA.get(key);
}
@Overridepublic void routerV(String key, Class>aClass) {
Clas