public static List<Class> getClassList(String packageName) { List> classList = new LinkedList();
String path = packageName.replace(".", "/");
System.out.println(""+path);
try {
Enumeration urls = getClassLoader().getResources(path);
System.out.println("urls:"+urls.toString());
while(true) {
while(true) {
URL url;
do {
if (!urls.hasMoreElements()) {
return classList;
}
url = (URL)urls.nextElement();
System.out.println("url:"+url.toString());
} while(url == null);
String protocol = url.getProtocol();
if (protocol.equals("file")) {
addClass(classList, url.toURI().getPath(), packageName);
} else if (protocol.equals("jar")) {
JarURLConnection jarURLConnection = (JarURLConnection)url.openConnection();
JarFile jarFile = jarURLConnection.getJarFile();
Enumeration jarEntries = jarFile.entries();
while(jarEntries.hasMoreElements()) {
JarEntry jarEntry = (JarEntry)jarEntries.nextElement();
String entryName = jarEntry.getName();
if (entryName.startsWith(path) && entryName.endsWith(".class")) {
String className = entryName.substring(0, entryName.lastIndexOf(".")).replaceAll("/", ".");
addClass(classList, className);
}
}
}
}
}
} catch (Exception var12) {
//log.error("获取类出错!", var12); //待修改
//log.error();
return classList;
}
}
private static void addClass(List<Class<?>> classList, String packagePath, String packageName) {
try {
File[] files = (new File(packagePath)).listFiles((filex) -> {
return filex.isDirectory() || filex.getName().endsWith(".class");
});
if (files != null) {
File[] var4 = files;
int var5 = files.length;
for(int var6 = 0; var6 < var5; ++var6) {
File file = var4[var6];
String fileName = file.getName();
String subPackagePath;
if (file.isFile()) {
subPackagePath = fileName.substring(0, fileName.lastIndexOf("."));
if (packageName != null) {
subPackagePath = packageName + "." + subPackagePath;
}
addClass(classList, subPackagePath);
} else {
subPackagePath = fileName;
if (packageName != null) {
subPackagePath = packagePath + "/" + fileName;
}
String subPackageName = fileName;
if (packageName != null) {
subPackageName = packageName + "." + fileName;
}
addClass(classList, subPackagePath, subPackageName);
}
}
}
} catch (Exception var11) {
throw new RuntimeException(var11);
}
}
第一个是扫描指定包下的类,第二个是以文件形式获取包下的所有Class(但是似乎你的这个代码不完整)。
自己动手丰衣足食,建议你自己一步一步调试看看代码的执行逻辑。