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
DDDoriginal
2024-12-05 01:45:11469parcourir

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);

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
}

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;

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());
        }
    }
}

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:
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