7

我正在使用 google Reflections 包来构建可用于调用的所有类的索引。以下代码应该返回 JVM 中加载的所有类:

List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());                      
Reflections reflections = new Reflections(new ConfigurationBuilder()
         .setScanners(new SubTypesScanner(false), new ResourcesScanner())
         .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0]))));
Set<Class<? extends Object>> allClasses = 
         reflections.getSubTypesOf(Object.class);

我注意到它返回的集合不包含 java.* 域中的任何内容。熟悉 Reflections 包的人可以告诉我如何获得这些吗?谢谢!

4

2 回答 2

7

Google Reflections 可用于获取所有类,包括 java.*,尽管它不是它的主要用途。

Reflections reflections = new Reflections(
    ClasspathHelper.forClass(Object.class), 
    new SubTypesScanner(false));

然后:

Set<String> allClasses = 
    reflections.getStore().getSubTypesOf(Object.class.getName());
于 2013-03-09T16:34:19.273 回答
2

并非所有类都由普通的类加载器加载;有些是由引导类加载器加载的以加快速度,这可以本地编码(因此无法从 Java 代码访问)。看到这条消息:

http://lists.jboss.org/pipermail/jboss-development/2008-April/011943.html

请参阅此问题以获取替代方案

Java - 获取 JVM 中加载的所有类的列表

于 2013-01-14T10:52:52.463 回答