gpt4 book ai didi

java - 在Java中不反射地查找包内的所有类

转载 作者:行者123 更新时间:2023-11-30 07:42:40 25 4
gpt4 key购买 nike

我正在尝试查找包内定义的所有类。我已经尝试过这段代码 -

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com