Bonjour,
Je travaille sur une application serveur/client, et utilise la réflexion pour appeler depuis le client des méthodes sur mes objets java.
Auparavant pour accéder à mes objets, je procédais ainsi :
Où param[0] représente le type d'objet, param[1] le l'ID, et le reste est transmis en tant que paramètres à la méthode correspondante de l'objet. ICommand me sert à parer aux problèmes de casting.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public Dialing_program dialing_program_1; public Dialing_program dialing_program_2; public Dialing_program dialing_program_3; monitor_1 = new Monitor(scope, (short) 1); monitor_2 = new Monitor(scope, (short) 2); monitor_3 = new Monitor(scope, (short) 3); // etc, autres objets divers public boolean doCommand(Object[] params) throws Exception { // Copie dans un tableau les paramètres à transmettre Object[] args = new Object[params.length-2]; for (short i = 0; i < args.length; i++) args[i] = params[i+2]; String object = params[0].toString(); if (params[1] != null) object += "_"+params[1].toString(); ICommand command = (ICommand) this.getClass().getField(object).get(this); command.doCommand(args); return true; }
Donc ceci fonctionne très bien, mais arrive le moment où mon programme comporte de plus en plus d'objets, et de type différents, et que je dois logiquement ranger dans des tableaux. Ce qui donne pour reprendre l'exmple précédent :
Et là, je ne sais pas comment accéder à mes objets ! La reflexion me renvoyant le tableau, mais ne me permettant pas de renvoyer les objets contenus dans ses cellules. Si je n'avais qu'un type d'objet, je pourrais copier cet élément pour y accéder : Object[] arr = this.getClass().getField(params[1].toString()).get(this);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public Monitor monitor[] = new Monitor[3]; public Dialing_program dialing_program[] = new Dialing_program[3];
Mais j'ai plusieurs types d'objets !
Voici que j'ai essayé :
Mais ça ne fonctionne pas. Cela fait un moment que je bloque, c'est pourquoi je sollicite votre aide pour trouver la solution !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public boolean doCommand(Object[] params) throws Exception { // Copie dans un tableau les paramètres à transmettre Object[] args = new Object[params.length-2]; for (short i = 0; i < args.length; i++) args[i] = params[i+2]; ArrayList list = (ArrayList) this.getClass().getField(params[0].toString()).get(this); ICommand command = (ICommand) list.get(0); command.doCommand(args); return true; }
Partager