[Reflection] Conversion de tableaux
Bonjour,
J'ai une fonction renvoyant un tableau d'objets (code exemple pour l'instant) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public static Object[] methodeEssai(String in_classe) throws Exception
{
Class lc_classe = Class.forName(in_classe);
Class lc_parametres[] = new Class[1];
lc_parametres[0] = Class.forName("java.lang.String");
Constructor lc_constructeur = lc_classe.getConstructor(lc_parametres);
String lc_param[] = new String[1];
Object[] in_tableau = new Object[5];
lc_param[0] = "0";
in_tableau[0] = lc_constructeur.newInstance(lc_param);
lc_param[0] = "1";
in_tableau[1] = lc_constructeur.newInstance(lc_param);
lc_param[0] = "2";
in_tableau[2] = lc_constructeur.newInstance(lc_param);
lc_param[0] = "3";
in_tableau[3] = lc_constructeur.newInstance(lc_param);
lc_param[0] = "4";
in_tableau[4] = lc_constructeur.newInstance(lc_param);
for(int i = 0;i < Array.getLength(in_tableau);i++)
{
System.out.println("Indice " + i + " : " + ((Integer) in_tableau[i]).intValue());
}
return in_tableau;
} |
et je voudrais récupérer :
Code:
Integer[] lc_entiers = methodeEssai("java.lang.Integer");
Mais le compilateur me met une erreur. Ne peut-on pas convertir un tableau d'Object en tableau d'Integer, Character, ...
Re: [INTROSPECTION]Conversion de tableaux
Salut,
Citation:
Envoyé par hdd
Code:
Integer[] lc_entiers = methodeEssai("java.lang.Integer");
Mais le compilateur me met une erreur. Ne peut-on pas convertir un tableau d'Object en tableau d'Integer, Character, ...
C'est normal puisque ta méthode renvoit un tableau d'Object et que tu l'affectes à un tableau d'Integer... ce qui n'est pas la même chose (un tableau d'Object peut conteneir n'importe quel type d'objet).
Il faut que tu spécifie au compilateur que le tableau d'Objet retourné est bien un tableau d'Integer avec un cast :
Code:
Integer[] lc_entiers = (Integer[]) methodeEssai("java.lang.Integer");
Par contre tu as un second problème dans ton code car pour pouvoir caster un Object[] en Integer[] il faut que ce dernier soit bien un Integer[]... Or lorsque tu fais :
Code:
Object[] in_tableau = new Object[5];
Tu crées un tableau d'Object[]...
Il faudrait remplacer ce code par :
Code:
Object[] in_tableau = (Object[]) Array.newInstance(lc_classe,5);
a++