Java でのリフレクションベースのクラス検出
Java アプリケーションでは、実行時に基本クラスを拡張するすべてのクラスを決定することは、 .class ファイルの急増の性質。この記事では、この制限を克服するためのさまざまなアプローチを検討します。
Java リフレクションとサードパーティ ライブラリの使用
リフレクションを通じて、アプリケーションのクラスパスをトラバースしてクラスを見つけることができます。 。 org.reflections のようなライブラリは、このタスクに便利なメソッドを提供します。例:
Reflections reflections = new Reflections("com.mycompany"); Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
このコードは、指定されたパッケージ内の MyInterface を拡張するすべてのクラスを取得します。
サンプル アプリケーション
必要なアプリケーションを考えてみましょう。 Animal を拡張するすべてのクラスのオブジェクトを作成します。上記の手法を使用すると、次のことを実現できます。
public static void main(String[] args) throws IllegalAccessException, InstantiationException { Reflections reflections = new Reflections("java.util"); Set<Class<? extends List>> classes = reflections.getSubTypesOf(java.util.List.class); for (Class<? extends List> aClass : classes) { System.out.println(aClass.getName()); if (aClass == ArrayList.class) { List list = aClass.newInstance(); list.add("test"); System.out.println(list.getClass().getName() + ": " + list.size()); } } }
このコードは、すべての List 実装の名前を出力し、ArrayList のインスタンスを作成してその機能を検証します。
結論
Java にはクラスベースの構造のため固有の課題がありますが、リフレクションや次のようなライブラリの使用は困難です。 org.reflections は、実行時クラス検出のための実用的なメソッドを提供し、開発者が機能を拡張し、継承関係に基づいてクラスのインスタンスを動的に作成できるようにします。
以上がJava で実行時に特定のクラスのすべてのサブクラスを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。