Java でプログラムによるインターフェイス実装のクエリ
インターフェイスを実装するクラスのリストを取得するのは難しい場合があります。幸いなことに、Java では、このクエリに対処するためのいくつかのアプローチが提供されています。
Reflections ライブラリの使用:
Reflections は、開発者がクラスやデータに関するメタデータを検査および操作できるようにする人気のライブラリです。パッケージ。リフレクションを使用すると、特定のインターフェイスを実装するサブクラスのリストを取得できます。
Reflections reflections = new Reflections("my.package"); Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);
ServiceLoader の活用:
ServiceLoader は、互換性のある実装を検出するためのプラットフォームに依存しないメカニズムを提供します。サービスプロバイダーインターフェイスの。このアプローチでは、インターフェイスをサービス プロバイダー インターフェイスとして定義し、その実装を宣言する必要があります。このインフラストラクチャをセットアップした後、次のように実装を取得できます:
ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class); for (Pet implClass : loader) { System.out.println(implClass.getClass().getSimpleName()); }
パッケージ レベルのアノテーションの使用:
パッケージ レベルのアノテーションは、アノテーションを付ける方法を提供します。メタデータを含むパッケージ。この機能を利用して、パッケージに含まれるクラスに関する情報をパッケージにタグ付けできます。このアプローチを利用するには:
実装クラスを識別するためのカスタム アノテーションを定義します:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PACKAGE) public @interface MyPackageAnnotation { Class<?>[] implementationsOfPet() default {}; }
アノテーションを適切なパッケージに適用します。ソースコード:
@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class}) package my.package;
クエリ実装されたクラス:
Package[] packages = Package.getPackages(); for (Package p : packages) { MyPackageAnnotation annotation = p.getAnnotation(MyPackageAnnotation.class); if (annotation != null) { Class<?>[] implementations = annotation.implementationsOfPet(); System.out.println("Found implementation: " + implementations[0].getSimpleName()); } }
これらの手法により、指定されたインターフェイスを実装するクラスのリストを柔軟に取得できます。
以上がJava で特定のインターフェイスを実装するクラスをプログラムで見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。