2

Reflectionsライブラリを使用して、特定のクラスのすべてのサブクラスを取得しようとしています。特定のクラスパスURLのサブクラスのみに検索をフィルタリングする必要があります。これは私が使用しているコードです:

ConfigurationBuilder config = new ConfigurationBuilder();
config.addUrls(<my_url>);
Reflections reflections = new Reflections(config);
Set<Class<? extends A>> set = reflections.getSubTypesOf(A.class)

私の問題は次のとおりです。クラスBがAを拡張し、クラスCがBを拡張するとします。

A <|-- B <|-- C

AとBはCとは異なるクラスパスURLにあります。また、リフレクションに指定されたURLはCのURLです。その場合、Cは返されたセットに含まれると予想され、Bは別のセットにあるため存在しないはずです。クラスパスURL。

ただし、返されるセットは空です。Cは、Aの推移的な子孫ですが、リフレクションによって返されるクラスのセットには含まれていません。BをCの同じクラスパスURLに移動すると、BとCの両方が返されます。次に、問題は、階層の中央にあるクラスのいずれかがフィルター処理されたURLにない場合、Reflectionsがデフォルトで(推移的な)サブクラスに応答しないことだと思います。

私の質問は次のとおりです。階層の中央にある特定のクラスがフィルターされたURLにない場合(ただし、サブクラス自体はフィルターされたURLにある場合)、特定のクラスの(推移的な)サブクラスに応答するようにリフレクションに指示するにはどうすればよいですか?

4

1 に答える 1

0

要点は、関連するすべての URL がスキャンされない場合、推移性は検出できないということです。クラスパスを知っている必要があります。

関連するすべての URL がわからない場合は、次を使用してすべての URL をスキャンできます。

ClasspathHelper.forClassLoader()
于 2013-03-10T07:54:59.233 に答える