7

私はグーグルリフレクションパッケージを使用して、呼び出すことができるすべてのクラスのインデックスを作成しています。次のコードは、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 に答える