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

标签 java

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

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/

相关文章:

java - em.Persist(book) 不会更新实体

java - 如何在 Java 中从日期中删除序数值

java - 有没有java库可以将ODF转换/解析为html输出?

java - Spring 5.0.0 MockMvc : Unsupported media type, 即使设置了正确的 MediaType

java - 如何在JavaFx中延迟加载图像?

Java - 定义 - "principle of substitution"

java - 当在与请求对象关联的空对象上调用方法时,JSTL 中没有 NullPointerException。为什么?

java - 如何提高 SWT 绘图性能?

java - 如何在 Spring 中实现我自己的 @Tranactional 感知服务

java - Java 面试后的反射(reflection) : Inheritance and polymorphism