我确实搜索了解决方案,找到了给定类的所有子类,然后我看到了this thread
据我所知,有一些工具可以做这些,例如Reflections,在Spring框架中使用ClassPathScanningCandidateComponentProvider
或者extcos。
但是在尝试了所有这些之后,似乎它们都不适用于jdk中的给定类(List,Map,Number,...)。
我查看了他们的源代码,看看它们是如何工作的,我认为原因是因为他们需要获取我们在其中查找子类作为资源的包,而函数classloader.getResource(String name)
总是为包名返回null在jdk。
那么,为什么classloader.getResource(String name)
在jdk中为包名返回null?并且有没有人知道获得适用于jdk的子类的解决方案?
答案 0 :(得分: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());
}