私は開発中の Java ライブラリでGoogle Reflectionsを使用しています。リフレクションを使用する理由は、特定の注釈を持つすべてのクラスを見つけたいからです。単純化すると、私のライブラリには、これらのクラスに応答するメソッドがあり、次のような行で呼び出されます。
//this method uses the Reflections library
Repository.getDefault().getMyAnnotatedClasses()
私のライブラリの現在のバージョンでは、リフレクション ライブラリが注釈付きのクラスを探す必要があるパッケージ名を明示的に追加するようユーザーに要求します。
Repository.getDefault().addSearchPath("...");
このようにして、リフレクションはそのパッケージにのみ存在するクラスを探します。
ライブラリのユーザーがこの検索パスを追加しない場合は、システム クラス ローダーのすべてのクラスを検索するように Reflections を構成します。明らかに、このソリューションは非常に非効率的です。ただし、ユーザーに常に検索パスを設定するように求めるという要件を本当に取り除きたいと思っています。- 重要な場合の注意点: Reflections では、パッケージ名、url (クラスを見つけることができるクラスパス)、またはクラス ローダーを使用して検索パスを構成できます。
だから私の質問は:私のライブラリを呼び出すクラスのクラスパスを見つける方法はありますか? (私のライブラリコードから)。このようにして、ユーザーが検索場所を明示的に設定していない場合、デフォルトでその場所を追加することを検出できました。これは、システム クラス ローダー全体を代替検索パスとして追加するよりも優れたソリューションと思われます。
ライブラリ コードからメソッド コール スタックを手動で検査できることはわかっていますが、これは少しハックで汚れたソリューションのように思われるため、別のアイデアを探しています。
前もって感謝します。