在JDK库中查找给定类的子类

4
我搜索了如何查找给定类的所有子类的解决方案,并看到了这个帖子
据我所知,有一些工具可以完成此任务,例如Reflections,在Spring框架中使用ClassPathScanningCandidateComponentProvider或extcos。但是在尝试它们之后,似乎没有一个适用于jdk中的给定类(List、Map、Number等)。
我查看了它们的源代码,了解了它们的工作原理,我认为原因是因为它们需要将我们寻找子类的包作为资源获取,并且函数classloader.getResource(String name)对于jdk中的包名始终返回null。
那么,为什么classloader.getResource(String name)对于jdk中的包名返回null?有没有人知道一个适用于jdk的获取子类的解决方案?

1
你能否添加一个资源未找到的示例?如果你运行 System.out.println(getClass().getClassLoader().getResource("java/lang/String.class"));,你将会得到一个URL。 - Cfx
这是我尝试过的代码:ClassLoader.getSystemClassLoader().getResource("java/util"); 如果我获取另一个不在JDK中的包的路径资源,则它会返回值。 - user4469150
1
正如帖子所说,您必须扫描JDK中的所有类以获取所有子类。 - snow8261
1个回答

1

为什么不尝试从您的链接中选择一种解决方案呢?

以下是一个简单的示例,使用 https://github.com/ronmamo/reflections.git

在查看了 test 类之后,这个示例很容易理解。

Reflections reflections = new Reflections(new ConfigurationBuilder()
        .setUrls(Arrays.asList(ClasspathHelper.forClass(List.class))));

Set<Class<? extends List>> subTypes = reflections.getSubTypesOf(List.class);
for (Class c : subTypes) {
    System.out.println("subType: " + c.getCanonicalName());
}

非常感谢,它完美地运行了。我确实尝试过Reflections,但没有使用配置,只专注于extcos以获得更好的性能 :) - user4469150

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接