Maison >Java >javaDidacticiel >Comment puis-je rechercher par programme toutes les classes implémentant une interface donnée en 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!