获取CurrentClass的所有SuperClass和接口
来源:互联网 发布:java xml 字节点 编辑:程序博客网 时间:2024/05/19 02:03
根据当前class获取所有的父类(接口)
近期在看EventBus的源码,看到这段根据当前class获取所有的superclass和接口的代码片段,现在就把这段代码,提取出来,与小伙伴们共享,也为了以后可能使用到,留个标记
果然看源码,好处多多,受益多多,啊哈哈~~~~
static Map<Class<?>,List<Class<?>>> eventTypesCache = new HashMap<Class<?>,List<Class<?>>>(); private static List<Class<?>> lookupAllEventTypes(Class<?> eventClass) { List<Class<?>> eventTypes = eventTypesCache.get(eventClass); if (eventTypes == null) { eventTypes = new ArrayList<>(); Class<?> clazz = eventClass; while (clazz != null) { //获取所有父类和接口的集合 eventTypes.add(clazz); addInterfaces(eventTypes, clazz.getInterfaces()); clazz = clazz.getSuperclass(); } //然后以eventClass为key,保存到eventTypesCache中 eventTypesCache.put(eventClass, eventTypes); } return eventTypes; } /**获取所有接口*/ /** Recurses through super interfaces. */ static void addInterfaces(List<Class<?>> eventTypes, Class<?>[] interfaces) { for (Class<?> interfaceClass : interfaces) { if (!eventTypes.contains(interfaceClass)) { eventTypes.add(interfaceClass); addInterfaces(eventTypes, interfaceClass.getInterfaces()); } } }
测试
static abstract class People implements onClickListener{ String name; String id; public People(String name,String id){ this.name = name; this.id = id; } public People(){ } } static interface onClickListener{ public void onClick(); }public static void main(String[] args) { lookupAllEventTypes(People.class); Set<Entry<Class<?>, List<Class<?>>>> set = eventTypesCache.entrySet(); for(Entry<Class<?>, List<Class<?>>> entry:set){ List<Class<?>> list = entry.getValue(); for(Class clazz:list){ System.out.println("key="+entry.getKey()+",value="+clazz); } } }
测试结果
key=class test.Demo$People,value=class test.Demo$Peoplekey=class test.Demo$People,value=interface test.Demo$onClickListenerkey=class test.Demo$People,value=class java.lang.Object
0 0
- 获取CurrentClass的所有SuperClass和接口
- 获取接口所有IPV6地址和前缀的方法
- 获取本机所有接口和所有IP地址的函数
- 获取继承某个接口的所有方法
- 想要获取Available SOAP services的所有暴露接口和方法报错
- java反射获取某接口的所有实现类
- Java根据包名获取指定接口的所有实现
- Spring 获取 实现某接口的所有实例bean
- 获取实现某个接口的所有实现类集合
- 获取所有wlan的名称和信号量
- 通过接口获取所有实现类以及通过注解获取实现类的思路
- Java 获取接口所有实现类
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- JAVA-获取实现了指定接口类的所有实现类或继承了指定类的所有子类
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- 通过反射机制获取位于同一个包下的接口的所有实现类
- linux系统下获取所有处于UP状态的接口的shell
- 所有的平台及浏览器获取客户端IP(外网): 使用的搜狐接口
- 编码经验 2016年6月7日
- (Android)线程池
- txt文件的操作
- HDU 1003 Max Sum (入门DP[1] 最大连续子序列)
- ListView Item点击监听事件失效
- 获取CurrentClass的所有SuperClass和接口
- 竖直滑动View制作引导页
- 如何检测鼠标/触摸点碰到某个collider2D?
- arm汇编中ldr指令中出现的等号作用
- RESTful API 设计指南
- javascript DOM编程学习心得之基础
- 单例模式静态内部类实现线程安全。
- Eclipse中的引用项目报Could not find *.apk!解决办法
- UVA 10943 (DP 水~)