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!