Maison > Java > javaDidacticiel > Comment puis-je rechercher par programme toutes les classes implémentant une interface donnée en Java ?

Comment puis-je rechercher par programme toutes les classes implémentant une interface donnée en Java ?

DDD
Libérer: 2024-12-05 01:45:11
original
485 Les gens l'ont consulté

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

Récupération par programmation des implémentations de classe d'une interface en Java

La réflexion Java offre des mécanismes flexibles pour l'introspection des classes et des interfaces. Dans ce contexte, les développeurs peuvent tirer parti de la réflexion pour récupérer une liste de toutes les classes qui implémentent une interface spécifique.

Approche basée sur la réflexion

Utilisation des réflexions bibliothèque, les développeurs peuvent facilement récupérer les sous-classes d'une interface comme suit :

Reflections reflections = new Reflections("firstdeveloper.examples.reflections");
Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);
Copier après la connexion

Approche ServiceLoader

Le ServiceLoader Java fournit une approche alternative pour découvrir les implémentations d'interface. Cette technique nécessite de définir l'interface comme une interface de fournisseur de services (SPI) et de déclarer ses implémentations :

ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class);
for (Pet implClass : loader) {
    System.out.println(implClass.getClass().getSimpleName()); // prints Dog, Cat
}
Copier après la connexion

Approche d'annotation au niveau du package

Avec package -level annotations, nous pouvons déclarer les implémentations d'une interface au sein du package-info.java file:

@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class})
package examples.reflections;
Copier après la connexion

Ensuite, nous pouvons récupérer ces implémentations en utilisant la réflexion :

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());
        }
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal