private static void extractClassFile(Set<Class<?>> classSet, File directory, String packageName) {
//1、递归终止条件
if (!directory.isDirectory()) {
return;
}
//2、遍历文件名,只添加目录和以.class结尾的文件名
String[] fileNames = directory.list((dir, name) -> {
if (dir.isDirectory()) {
return true;
} else if (name.endsWith(".class")) {
return true;
}
return false;
});
//3、遍历这些子文件,如果是目录则递归,否则直接加载(上一步已经把非.class结尾的给过滤掉了)
for (String fileName : fileNames) {
File file = new File(directory, fileName);
if (file.isDirectory()) {
extractClassFile(classSet, file, packageName + "." + fileName);
} else {
loadClass(packageName + "." + fileName, classSet);
}
}
}
测试的结果跟老师的代码一样(我写的应该也是可行的),只是感觉这样写对我来说更清晰理解。但是涉及到递归,我不知道怎样调试,确保自己的一定是正确的,老师能帮忙看看吗。