Bonjour,

J'utilise une méthode pour instancier des objets directement par les classes associés, dont l'extrait est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public Object constructeur(String classe, Class[] classesParam, Object[] arguments) {
 Class<C> classe = Class.forName(classe);
 Constructor<C> constructeur = classe.getConstructor(classesParam);
 Object résultat = constructeur.newInstance(arguments);
}
// Appel
constructeur("Test",new Class[] {String.class,Object.class},new Object[] {"strParam1",monObjet2});
// La classe Test serait
public class Test {
 public Test(String param1, Object param2){}
}
Jusque là, pas de soucis. Mais l'une de mes classe utilise dans le constructeur des tableaux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
public class Test {
 public Test(String[] param1, Object[] param2){}
}
J'essai ceci, mais sans résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
String[] param1 = {"A","B"};
Object[] param2 = {MonObjetA,MonObjetB};
 
Class[] classString = {String.class};
Class[] classObject = {Object.class};
constructeur("Test",new Class[] {classString,classObject},new Object[] {param1,param2});
Mais j'obtiens l'erreur de conversion de Class[] vers Class sur le champ "classString" (alors qu'il l'accepte pour param1).

Comment dois-je paramétrer l'appel ? Ou si je ne peux pas utiliser la même méthode, comment utiliser "classe.getConstructor(classesParam);" (arguments et appels) ?
Merci !

--------------------------------
Bah j'ai trouvé la solution, en cherchant à l'inverse par la méthode getConstructors() de la classe Class :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
String[] param1 = {"A","B"};
Object[] param2 = {MonObjetA,MonObjetB};
 
Class classString = Class.forName("[Ljava.lang.String;");
Class classObject = Class.forName("[Ljava.lang.Object;");
constructeur("Test",new Class[] {classString,classObject},new Object[] {param1,param2});