Je veux rendre l'initialisation de mon programme un peu plus "intelligente".Comment trouver toutes les implémentations d'une certaine interface?
J'ai plusieurs classes qui représentent des commandes. Toutes ces classes sont immuables (c'est-à-dire que la création d'une seule instance de chacune doit être suffisante pour l'ensemble de l'application). Toutes ces classes implémentent l'interface Command
. Je pense que le fait que certaines classes soient placées dans le même pot avec une classe avec la méthode principale (peut-être même dans un paquet prédéfini) et que ces classes implémentent une interface connue devrait donner suffisamment d'informations pour permettre automatiser la création de leurs instances.
Comment puis-je implémenter cette fonctionnalité? (Évidemment, c'est quelque chose de étroitement lié à la réflexion, et peut-être, avec les mécanismes de chargement de classe Java, mais je ne suis pas un expert dans ces domaines).
Je veux avoir quelque chose comme ceci:
public static void init() {
...
Map<String, Command> commands = Maps.newHashMap();
for (Class clazz : findCommandImplementationsInThisJarFile()) {
//some try/catch stuff is ommited
Command command = clazz.newInstance();
commands.put(command.getName(), command);
}
...
}
Comment implémenter la méthode délicate findCommandImplementationsInThisJarFile()
?
Cool! J'aime ça. Il a des fonctionnalités nécessaires, simple d'utilisation, et (j'en suis presque sûr) ça va être très intéressant d'étudier l'implémentation (car je ne sais pas encore comment faire les mêmes choses moi-même). – Roman