我正在使用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);我注意到它返回的set不包含java.*域中的任何内容。熟悉Reflections软件包的人能建议我如何获得这些吗?谢谢!
发布于 2013-01-14 18:52:52
并不是所有的类都是由普通的类加载器加载的;有些类是由bootstrap类加载器加载的,以加快速度,这可以在本地编码(因此无法从Java代码访问)。请参阅此消息:
http://lists.jboss.org/pipermail/jboss-development/2008-April/011943.html
有关替代方案,请参阅此问题
发布于 2013-03-10 00:34:19
Google Reflections可用于获取所有类,包括java.*,尽管它不是其主要用途。
Reflections reflections = new Reflections(
ClasspathHelper.forClass(Object.class),
new SubTypesScanner(false));然后:
Set<String> allClasses =
reflections.getStore().getSubTypesOf(Object.class.getName());https://stackoverflow.com/questions/14314789
复制相似问题