cs_Tibabou
Messages postés129Date d'inscriptionmercredi 2 janvier 2002StatutMembreDernière intervention 7 juillet 2012
-
24 avril 2012 à 22:36
Utilisateur anonyme -
5 mai 2012 à 00:26
Bonjour,
Je dispose d'un fichier A.class correspondant à une classe java compilée. La classe A implémente une interface I.
J'ai un programme P qui connaît la déclaration de I et qui doit instancier A.
J'ai cherché du côté de la réflexion mais sans succès.
Avez-vous une idée ?
cs_Tibabou
Messages postés129Date d'inscriptionmercredi 2 janvier 2002StatutMembreDernière intervention 7 juillet 2012 26 avril 2012 à 22:34
Merci à vous 2 pour votre aide.
J'ai aussi trouvé quelque chose qui semble fonctionner. J'ai écrit une classe "MyClassB" dont le *.class se trouve dans F:\MonDossier et j'exécute ceci :
URL[] urls = new URL[]{new URL("file:\\F:\\MonDossier\")};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("MyClassB");
Object instB = cls.newInstance();
"instB" contient bien une instance de ma classe.
Pour ce qui est de la réflexion Pylouq, tu peux jeter un oeil aux sites parlant d'introspection ou de réflexivité.
cormandyr
Messages postés600Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention 8 juillet 201611 25 avril 2012 à 08:09
Salut,
Tu as plusieurs moyen d'instancier une classe...
Soit directement avec le new.... soit ClassLoader.getSystemClassLoader().loadClass(...).newInstance() où tu donnes la classe à instancier (org.xxx.A par exemple) ou encore Class.forName("org.xxx.A").newInstance()
Attention que pour les deux dernières, le constructeur par défaut doit exister.
Il y a peut-être d'autre moyen, mais comme ça il ne me vienne pas à l'esprit...
J'ai cherché du côté de la réflexion mais sans succès.
Réflexion ? C'est à dire ?
Personnellement, j'ai déjà été amené à faire quelque chose de très similaire, et je suis passé par le deuxième façon de faire dite par cormandyr .
Au final, ça donnait quelque chose comme ça :
La différence avec ce que tu veux, c'est que là je passe un chemin avec un nom de classe, et non pas le fichier .class lui même. De mémoire, je crois qu'en paramètre c'est le nom du .class et .java. Essaye de cette façon et donne nous des nouvelles.
--
Pylouq (Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)