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
Barbara Streisandoriginal
2024-11-26 05:16:10603parcourir

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

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

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!

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