Maison > Java > javaDidacticiel > Comment puis-je découvrir toutes les sous-classes d'une classe donnée lors de l'exécution en Java ?

Comment puis-je découvrir toutes les sous-classes d'une classe donnée lors de l'exécution en Java ?

Barbara Streisand
Libérer: 2024-11-26 05:16:10
original
551 Les gens l'ont consulté

How Can I Discover All Subclasses of a Given Class at Runtime in Java?

Découverte de classes basée sur la réflexion en Java

Dans les applications Java, déterminer toutes les classes étendant une classe de base au moment de l'exécution pose un défi en raison de la nature de la prolifération des fichiers .class. Cet article explore diverses approches pour surmonter cette limitation.

Utilisation de Java Reflection et des bibliothèques tierces

Grâce à la réflexion, il est possible de parcourir les chemins de classe d'une application pour localiser les classes. . Les bibliothèques comme org.reflections fournissent des méthodes pratiques pour cette tâche. Par exemple :

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

Ce code récupère toutes les classes qui étendent MyInterface dans le package spécifié.

Exemple d'application

Considérez une application qui a besoin pour créer des objets de toutes les classes qui étendent Animal. En utilisant la technique ci-dessus, nous pouvons y parvenir :

public static void main(String[] args) throws IllegalAccessException, InstantiationException {
    Reflections reflections = new Reflections("java.util");
    Set<Class<? extends List>> classes = reflections.getSubTypesOf(java.util.List.class);
    for (Class<? extends List> aClass : classes) {
        System.out.println(aClass.getName());
        if (aClass == ArrayList.class) {
            List list = aClass.newInstance();
            list.add("test");
            System.out.println(list.getClass().getName() + ": " + list.size());
        }
    }
}
Copier après la connexion

Ce code imprimera les noms de toutes les implémentations de List et créera une instance d'ArrayList pour vérifier sa fonctionnalité.

Conclusion

Bien qu'il existe des défis inhérents à Java en raison de sa structure basée sur les classes, l'utilisation de réflexion et de bibliothèques comme org.reflections fournit des méthodes de découverte de classes d'exécution, permettant aux développeurs d'étendre les fonctionnalités et de créer dynamiquement des instances de classes en fonction de leurs relations d'héritage.

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