我正在尝试查找包内定义的所有类。我已经尝试过这段代码 -
public static File[] getPackageContent(String packageName) throws IOException{
ArrayList<File> list = new ArrayList<File>();
Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(packageName);
while (urls.hasMoreElements()) {
URL url = urls.nextElement();
File dir = new File(url.getFile());
for (File f : dir.listFiles()) {
list.add(f);
}
}
return list.toArray(new File[]{});
现在问题是 - 如果字符串 packageName
不包含“.”字符,它返回我想要的所有类的名称。但假设如果 packageName
包含“.”字符它不返回任何内容。
这是为什么呢?如果可能的话,我怎样才能找到包内的所有类,其中包名称确实有一个“。”里面的人物?
最佳答案
您可以使用反射:
private Class<?>[] scanForTasks(String packageStr) {
Reflections reflections = new Reflections((new ConfigurationBuilder()).setScanners(new Scanner[]{new SubTypesScanner(), new TypeAnnotationsScanner()}).setUrls(ClasspathHelper.forPackage(packageStr, new ClassLoader[0])).filterInputsBy((new FilterBuilder()).includePackage(packageStr)));
Set classes = reflections.getTypesAnnotatedWith(Task.class);
Class[] taskArray = (Class[])classes.toArray(new Class[classes.size()]);
return taskArray;
}
}
关于java - 在Java中不反射地查找包内的所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34439791/