2012-04-23 9 views
3

可能性の重複:
At runtime, find all classes in a Java application that extend a base classJavaのリストの親のすべての子クラス

私は特定のクラスを拡張するすべてのクラス(子)のリスト(親)を取得する必要があります

それらのすべてのインスタンスを作成します。

Javaでこれを行う必要がありますか?

+0

http://stackoverflow.com/questions/205573/at-runtime-find-all-classes-in-a-java-application-that-extend-a-base-class –

+0

をご覧ください。パッケージのセットなど、いくつかの制約があるとします。制約を与えずにあるクラスを拡張するすべてのクラスを見つけることは不可能です。 – Jagger

答えて

4

私はあなたのようなあなたのメタデータを照会することができ、反射を利用しhttp://code.google.com/p/reflections/

を使用します。

  • は、いくつかのタイプのすべてのサブタイプが
  • は、いくつかのアノテーションを付け、すべてのタイプ/メソッド/フィールドをゲット、注釈パラメーターの一致なしなし
  • 正規表現に一致するすべてのリソースを取得

これは、インデックス付きモードまたはキャッシュモードで使用できます。 @Jaggerが示唆するように、すべてのクラスのブルートフォース検索は比較的遅いです。また、パッケージごとに検索を制限することもできます。 com.mycom.*

+0

私はあなたが特定のクラスを拡張するすべてのクラスを見つけるためにリフレクションAPIを使用できるとは思っていません。私は間違っているかもしれません。私。リフレクションAPIを使用して、あるタイプのスーパータイプを簡単に取得できますが、あるタイプのすべてのサブタイプを取得することは簡単にできます。 – Alderath

+1

これはライブラリの機能です。 [The Reflection API](http://docs.oracle.com/javase/tutorial/reflect/index.html)と混同しないでください。あなたが言うことはこれをしません。 ;) –

+1

私の間違い。私の前のコメントは無視してください。私は主に灰色のボックスを読むことに焦点を当て、あなたがjava.lang.reflectを意味すると仮定しました。 – Alderath

関連する問題