ホームページ > Java > &#&チュートリアル > Java で特定のインターフェイスを実装しているすべてのクラスをプログラムで検索するにはどうすればよいですか?

Java で特定のインターフェイスを実装しているすべてのクラスをプログラムで検索するにはどうすればよいですか?

DDD
リリース: 2024-12-05 01:45:11
オリジナル
468 人が閲覧しました

How Can I Programmatically Find All Classes Implementing a Given Interface in Java?

Java でのインターフェイスのクラス実装をプログラムで取得する

Java リフレクションは、クラスとインターフェイスをイントロスペクトするための柔軟なメカニズムを提供します。このコンテキストでは、開発者はリフレクションを活用して、特定のインターフェイスを実装するすべてのクラスのリストを取得できます。

リフレクションベースのアプローチ

リフレクションの使用 ライブラリを使用すると、開発者はインターフェイスのサブクラスを次のように簡単に取得できます。

Reflections reflections = new Reflections("firstdeveloper.examples.reflections");
Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);
ログイン後にコピー

ServiceLoader アプローチ

Java ServiceLoader は、インターフェイス実装を検出するための代替アプローチを提供します。この手法では、インターフェイスをサービス プロバイダー インターフェイス (SPI) として定義し、その実装を宣言する必要があります。

ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class);
for (Pet implClass : loader) {
    System.out.println(implClass.getClass().getSimpleName()); // prints Dog, Cat
}
ログイン後にコピー

パッケージ レベルのアノテーション アプローチ

With package -level アノテーション を使用すると、package-info.java 内でインターフェイスの実装を宣言できます。 file:

@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class})
package examples.reflections;
ログイン後にコピー

次に、リフレクションを使用してこれらの実装を取得できます:

Package[] packages = Package.getPackages();
for (Package p : packages) {
    MyPackageAnnotation annotation = p.getAnnotation(MyPackageAnnotation.class);
    if (annotation != null) {
        Class<?>[] implementations = annotation.implementationsOfPet();
        for (Class<?> impl : implementations) {
            System.out.println(impl.getSimpleName());
        }
    }
}
ログイン後にコピー

以上がJava で特定のインターフェイスを実装しているすべてのクラスをプログラムで検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート