Maison >Java >javaDidacticiel >Comment puis-je rechercher dynamiquement toutes les sous-classes d'une classe de base en Java au moment de l'exécution ?

Comment puis-je rechercher dynamiquement toutes les sous-classes d'une classe de base en Java au moment de l'exécution ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 03:50:11180parcourir

How Can I Dynamically Find All Subclasses of a Base Class in Java at Runtime?

Identification dynamique des sous-classes dans les applications Java

Les programmes Java utilisent des fichiers .class qui sont vaguement fédérés. Cela rend difficile l’identification dynamique de toutes les sous-classes qui étendent une classe de base au moment de l’exécution. Cependant, il existe un mécanisme disponible pour atténuer cette limitation.

Bibliothèque org.reflections

La bibliothèque org.reflections offre une solution puissante pour découvrir des sous-classes au moment de l'exécution. Il utilise des annotations et une réflexion pour introspecter les classes et leurs relations. L'extrait de code suivant illustre son utilisation :

Reflections reflections = new Reflections("com.mycompany");
Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);

où "com.mycompany" est le package à rechercher pour les classes. Ce code capture tous les sous-types de MyInterface dans le package spécifié.

Exemple d'utilisation

Par exemple, considérons le code suivant :

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 le code parcourt tous les sous-types de List dans le package java.util. Plus précisément, il identifie ArrayList et démontre la possibilité de créer une instance avec réflexion. Le résultat comprendra les éléments suivants :

java.util.LinkedList
java.util.AbstractSequentialList
java.util.Vector
java.util.ArrayList: 1

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