ホームページ > Java > &#&チュートリアル > Java でのインターフェイス実装の完全なリストをプログラムで取得するにはどうすればよいですか?

Java でのインターフェイス実装の完全なリストをプログラムで取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-07 07:17:12
オリジナル
850 人が閲覧しました

How Can I Programmatically Get a Complete List of Interface Implementations in Java?

Java でのプログラミングによるインターフェイス実装の包括的なリストの取得

Java では、プログラムによってインターフェイス実装のコレクションを取得する必要が生じることがよくあります。特定のインターフェイスを実装するクラス。これはさまざまなアプローチを通じて実現できますが、その中にはリフレクションやその他の特殊なテクニックの利用が含まれます。

リフレクション ライブラリの使用: リフレクション

リフレクション ライブラリは便利な方法を提供します。クラスのメタデータと関係を検査します。 Reflections インスタンスを利用すると、次の例に示すように、目的のインターフェイスを拡張するクラスのセットを取得できます。

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

ServiceLoader の採用

ServiceLoaderは、実行時にサービス プロバイダー実装を検索してロードするためのメカニズムを提供します。この手法を利用してインターフェイス実装を取得するには、ServiceProviderInterface (SPI) を定義し、その実装を宣言します。次のコードは、このアプローチを示しています。

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

パッケージ レベルのアノテーションを利用する

もう 1 つの方法には、パッケージ レベルのアノテーションを使用する方法があります。このアプローチでは、インターフェイスの実装を指定するカスタム アノテーションを作成する必要があります。次のコード サンプルは、アノテーションを定義する方法を示しています。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface MyPackageAnnotation {
    Class<?>[] implementationsOfPet() default {};
}
ログイン後にコピー

パッケージ内でアノテーションを宣言するには、package-info.java という名前のファイルを作成し、次の内容を含めます。

@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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート