ホームページ >Java >&#&チュートリアル >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 サイトの他の関連記事を参照してください。