获取CurrentClass的所有SuperClass和接口
2016-06-07 15:37
316 查看
根据当前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$People key=class test.Demo$People,value=interface test.Demo$onClickListener key=class test.Demo$People,value=class java.lang.Object
相关文章推荐
- Android Native 绘图方法
- C#中struct和class的区别详解
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- 深入了解PHP类Class的概念
- jquery 表单验证之通过 class验证表单不为空
- setAttribute 与 class冲突解决
- JavaScript通过HTML的class来获取HTML元素的方法总结
- JavaScript中的类(Class)详细介绍
- javascript面向对象包装类Class封装类库剖析
- jQuery针对input的class属性写了多个值情况下的选择方法
- 详解js中class的多种函数封装方法
- jQuery使用hide方法隐藏指定元素class样式用法实例
- jQuery给多个不同元素添加class样式的方法
- jQuery点击改变class并toggle及toggleClass()方法定义用法
- jquery采用oop模式class类的使用示例
- jquery点击改变class并toggle的实现代码
- JavaScript更改class和id的方法
- 一篇入门的php Class 文章
- 深入C++中struct与class的区别分析