在JAVA中,获取一个类的全部父类是比较简单的,只需要通过反射(Class的getSuperclass()方法)即可。然而,如果想获得一个类的所有子类,或者获得实现某一个接口的所有实现类,相对比较麻烦。
用过Eclipse的开发人员都知道,通过F4键或(Ctrl+T组合键)可以查到指定类的类层次结构。仔细想一下该快捷键的实现原理,或许可以找到一个可行的设计思路。
首先,需要确定一个前提是,寻找所有子类,必须先指定搜索的文件范围。打个比方,要寻找一个古人的所有后代成员,必须设置查找的地理范围是在中国内,否则就无从入手。
结合实际的项目部署环境,查找子类的方法需要有两种方式。第一种,在开发环境,可以直接遍历指定范围下的所有源代码文件,再结合反射的知识;第二种,假设项目已经打成jar包,则只能通过jar包获得所有类文件。
下面给出具体的代码实现
1.若是开发环境,则通过递归查找指定目录下的类文件的全路径,代码如下
1 /**
2 * 递归查找指定目录下的类文件的全路径3 *4 *@parambaseFile 查找文件的入口5 *@paramfileList 保存已经查找到的文件集合6 */
7 public static void getSubFileNameList(File baseFile, ListfileList) {8 if(baseFile.isDirectory()) {9 File[] files =baseFile.listFiles();10 for(File tmpFile : files) {11 getSubFileNameList(tmpFile, fileList);12 }13 }14 Stri