Java アプリケーションのサブクラスを動的に識別する
Java プログラムは、緩やかに統合された .class ファイルを利用します。このため、実行時に基本クラスを拡張するすべてのサブクラスを動的に識別することが困難になります。ただし、この制限を軽減するメカニズムがあります。
org.reflections ライブラリ
org.reflections ライブラリは、実行時にサブクラスを検出するための強力なソリューションを提供します。アノテーションとリフレクションを利用して、クラスとその関係を内省します。次のコード スニペットは、その使用法を示しています。
Reflections reflections = new Reflections("com.mycompany"); Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
ここで、「com.mycompany」はクラスをスキャンするパッケージです。このコードは、指定されたパッケージ内の MyInterface のすべてのサブタイプをキャプチャします。
使用例
たとえば、次のコードを考えてみましょう。
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()); } } }
Thisコードは、java.util パッケージ内の List のすべてのサブタイプを反復処理します。具体的には、ArrayList を識別し、リフレクションを使用してインスタンスを作成する機能を示します。出力には次のものが含まれます:
java.util.LinkedList java.util.AbstractSequentialList java.util.Vector java.util.ArrayList: 1
以上がJava の基本クラスのすべてのサブクラスを実行時に動的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。