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

Java で実行時に特定のクラスのすべてのサブクラスを検出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 05:16:10532ブラウズ

How Can I Discover All Subclasses of a Given Class at Runtime in Java?

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

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