Thinking lib for Java:查找包中的所有类

mtr*_*trc 4 java reflection

继这里发布的问题:你能用反射找到包中的所有类吗?我开始使用Reflections库来查找子类给定类型的所有类.从链接的SO问题的答案来看,源代码如下所示:

Reflections ref = new Reflections(new ConfigurationBuilder()
    .setScanners(new SubTypesScanner(false /* don't exclude Object.class */), new ResourcesScanner())
    .setUrls(ClasspathHelper.forPackage("org.somepackage"))
    .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("org.somepackage"))));

ref.getSubtypesOf(Object.class);
Run Code Online (Sandbox Code Playgroud)

然而,在暂时使用这段代码之后,我刚刚发现它只会在这个包中找到继承其他类型的类.它不会找到从外部定义的类子类化的类,比如来自另一个用户定义的类.

我不知道如何使用Reflections库来解决这个问题.我希望所有将其包声明为'org.somepackage'的类,无论它们的超类型是什么.有帮助吗?

gig*_*dot 6

我写了一个名为Rebound(而不是Reflection)的库,它搜索给定类型和包前缀的子类.如果将前缀设置为空,它将搜索类路径下的每个类,例如

import gigadot.exp.reflects.core.Processor;

Rebound r = new Rebound("");
Set<Class<? extends Processor>> classes = r.getSubClassesOf(Processor.class);
Run Code Online (Sandbox Code Playgroud)

但是你应该小心,因为在类路径中搜索所有内容是一个缓慢的过程.

该库比Reflection简单得多,可能无法满足您的需求.我写这篇文章是因为我在提交错误报告时感到沮丧,但没有人试图解决问题.