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 :

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;
	}
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.

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 :

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];
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);
Mais j'ai plusieurs types d'objets !

Voici que j'ai essayé :

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;
	}
Mais ça ne fonctionne pas. Cela fait un moment que je bloque, c'est pourquoi je sollicite votre aide pour trouver la solution !