继这里发布的问题:你能用反射找到包中的所有类吗?我开始使用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'的类,无论它们的超类型是什么.有帮助吗?
我写了一个名为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简单得多,可能无法满足您的需求.我写这篇文章是因为我在提交错误报告时感到沮丧,但没有人试图解决问题.