Maison > Java > javaDidacticiel > Comment puis-je obtenir par programme une liste des implémentations de l'interface Java ?

Comment puis-je obtenir par programme une liste des implémentations de l'interface Java ?

Mary-Kate Olsen
Libérer: 2024-12-09 07:48:07
original
920 Les gens l'ont consulté

How Can I Programmatically Get a List of Java Interface Implementations?

Obtention par programmation d'une liste des implémentations d'interface en Java

Explorer différentes manières d'obtenir une liste de toutes les implémentations d'une interface en Java, cet article plonge dans les domaines de la réflexion et d'autres techniques.

Réflexion avec réflexions Bibliothèque

Si l'incorporation d'une dépendance supplémentaire n'est pas un problème, la bibliothèque de réflexions offre une solution pratique. Il vous permet de récupérer les informations souhaitées avec un code concis :

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

ServiceLoader et SPI

ServiceLoader, comme mentionné précédemment, utilise l'interface du fournisseur de services (SPI) modèle. Cette approche nécessite que vous déclariez Pet comme SPI et que vous spécifiiez ses implémentations dans un fichier resources/META-INF/services/ spécifique. Le code de cette méthode est le suivant :

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

Annotation au niveau du package

L'approche d'annotation au niveau du package définit une annotation dans un package-info.java fichier dans un package spécifique, spécifiant les implémentations d’une interface. L'utilisation de cette technique est démontrée ci-dessous :

Annotation du package :

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface MyPackageAnnotation {
    Class<?>[] implementationsOfPet() default {};
}
Copier après la connexion

Package-info.java :

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

Code :

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal