java - 当并非层次结构中的所有类型都在过滤后的类路径 url 中时,使用反射查找类的(传递)子类型

标签 java reflection classpath reflections

我正在尝试使用 Reflections库获取特定类的所有子类。我需要将搜索过滤到特定类路径 url 中的子类。 这是我正在使用的代码:

ConfigurationBuilder config = new ConfigurationBuilder();
config.addUrls(<my_url>);
Reflections reflections = new Reflections(config);
Set<Class<? extends A>> set = reflections.getSubTypesOf(A.class)

我的问题如下:假设类 B 扩展了 A,类 C 扩展了 B。所以我们有:

A <|-- B <|-- C

A 和 B 在一个不同于 C 的类路径 URL 中。并且给反射的 url 是 C 的一个。然后我希望 C 在返回的集合中,并且 B 不应该存在,因为它在另一个类路径 url 中。

但是,返回的集合是空的。 C 不在反射返回的类集中,尽管它是 A 的传递后代。 如果我将 B 移动到 C 的相同类路径 URL,则 B 和 C 都会返回。 然后我想问题是如果层次结构中间的任何类不在过滤的 url 中,默认情况下反射不会回答(传递的)子类。

我的问题是:即使层次结构中间的某些类不在过滤的 url 中(但子类本身在过滤的 url 中),我如何指示反射来回答特定类的(传递的)子类?

最佳答案

关键是,如果没有扫描所有相关的 url,传递性就无法发现。你应该知道你的类路径。

如果您不知道涉及的所有网址,您可以扫描所有网址,使用

ClasspathHelper.forClassLoader()

关于java - 当并非层次结构中的所有类型都在过滤后的类路径 url 中时,使用反射查找类的(传递)子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917417/

相关文章:

java - jar 和类路径通配符

java - 为什么 executeUpdate() 函数不起作用?给出在普通项目而不是基于 maven 的项目中解决的步骤

java - JPA rest 在尝试上传 blob 时停止工作

java - 将列表从 JSP 重新填充到 Struts 2 中的操作

java - 在 spring-boot-maven-plugin 打包的 jar 中使用 ClassPath.getTopLevelClasses() 查找类

java - NoClassFoundError : org. apache.commons.codec.binary/Base64 运行时异常

java - 如何从 FilteredList 中删除项目?

java - 如何从另一个类中获取方法的局部变量

c# - 以 "."为前缀的类型名称的 Type.GetType 搜索规则是什么?

reflection - 通过反射获取 cmdlet 的动态参数