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 ?
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!