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

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

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

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

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

Java のインターフェイスのすべての実装のリストを取得するさまざまな方法を検討します。この記事では、リフレクションなどの領域について詳しく説明します。

Reflections Library によるリフレクション

追加の依存関係を組み込むことが問題ではない場合は、Reflection ライブラリが便利なソリューションを提供します。簡潔なコードで必要な情報を取得できます。

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

ServiceLoader と SPI

ServiceLoader は、前述したように、サービス プロバイダー インターフェイス (SPI) を利用します。モデル。このアプローチでは、Pet を SPI として宣言し、特定の resource/META-INF/services/ ファイルでその実装を指定する必要があります。このメソッドのコードは次のとおりです。

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

パッケージレベルの注釈

パッケージレベルの注釈アプローチでは、package-info.java で注釈を定義します。特定のパッケージ内のファイルで、インターフェイスの実装を指定します。この手法の使用法を以下に示します。

パッケージ注釈:

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

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