我确实搜索了为给定类查找所有子类的解决方案,我看到了 this thread
据我所知,有一些工具可以做到这一点,例如 Reflections,在 Spring 框架中使用 ClassPathScanningCandidateComponentProvider
,或 extcos。
但是在尝试了所有这些之后,似乎它们都不适用于 jdk 中的给定类(List、Map、Number,...)。
我查看了他们的源代码,看看他们是如何工作的,我认为原因是因为他们需要获取我们在其中寻找子类作为资源的包,以及函数 classloader.getResource(String name)
,对于 jdk 中的包名,总是返回 null。
那么,为什么 classloader.getResource(String name)
在 jdk 中为包名返回 null?有没有人知道获取也适用于 jdk 的子类的解决方案?
最佳答案
您为什么不尝试链接中的解决方案之一?
在下面找到一个使用 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());
}
关于java - 在 jdk 库中查找给定类的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28041525/