在 jdk 库中找到给定 class 的子 classes
find subclasses of a given class in jdk lib
我确实搜索了找到给定 class 的所有子 class 的解决方案,我看到了 this thread
据我所知,有一些工具可以做到这一点,例如 Reflections,在 Spring 框架中使用 ClassPathScanningCandidateComponentProvider
,或 extcos。
但是在尝试了所有方法之后,似乎 none 对 jdk 中给定的 class(列表、地图、数字、...)有效。
我查看了他们的源代码,看看他们是如何工作的,我认为原因是因为他们需要获取我们在其中寻找 subclasses 作为资源的包,以及函数 classloader.getResource(String name)
,总是returns jdk.
中的包名称为 null
那么,为什么 jdk 中的包名称 classloader.getResource(String name)
returns 为空?有没有人知道获得适用于 jdk 的 subclasses 的解决方案?
您为什么不尝试 link 中的一种解决方案?
在下面找到一个使用 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());
}
我确实搜索了找到给定 class 的所有子 class 的解决方案,我看到了 this thread
据我所知,有一些工具可以做到这一点,例如 Reflections,在 Spring 框架中使用 ClassPathScanningCandidateComponentProvider
,或 extcos。
但是在尝试了所有方法之后,似乎 none 对 jdk 中给定的 class(列表、地图、数字、...)有效。
我查看了他们的源代码,看看他们是如何工作的,我认为原因是因为他们需要获取我们在其中寻找 subclasses 作为资源的包,以及函数 classloader.getResource(String name)
,总是returns jdk.
中的包名称为 null
那么,为什么 jdk 中的包名称 classloader.getResource(String name)
returns 为空?有没有人知道获得适用于 jdk 的 subclasses 的解决方案?
您为什么不尝试 link 中的一种解决方案?
在下面找到一个使用 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());
}