ホームページ >Java >&#&チュートリアル >Java の基本クラスのすべてのサブクラスを実行時に動的に検索するにはどうすればよいですか?

Java の基本クラスのすべてのサブクラスを実行時に動的に検索するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 03:50:11135ブラウズ

How Can I Dynamically Find All Subclasses of a Base Class in Java at Runtime?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。