Bonjour,

Je développe une application client/serveur communiquant par objets sérialisés au moyen d'un flux ObjectOutputStream. Les objets sérialisés pouvant être de types différents, je suis confronté à un petit problème :

Tant que mon client transmet les objets dans un ordre déterminé (et connu du serveur), tout fonctionne sans souçis. Ce dernier sait en effet, à quel type d'objet s'attendre et peut le désérialiser correctement. Exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
// Client (sérialise les objets sur le flux réseau)
ObjectOutputStream oos = new ObjectOutputStream(maSocketClient.getOutputStream());
oos.writeObject(new Truc());
oos.writeObject(new Machin());
oos.writeObject(new Bidule());
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
// Serveur (désérialise)
ObjectInputStream ois = new ObjectInputStream(maSocketServeur.getInputStream());
Truc t = (Truc)ois.readObject();
Machin m = (Machin)ois.readObject();
Bidule b = (Bidule)ois.readObject();
Par contre, imaginez par exemple que l'utilisateur puisse décider de l'objet à envoyer sur le flux (au moyen d'une interface graphique par exemple). Comment puis-je savoir, au niveau de mon serveur, quel type d'objet je dois récupérer, et comment l'instancier ?
J'ai essayé de le récupérer dans la classe générale Object, à partir duquel je peux trouver le nom de la classe, etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Object o = ois.readObject();
if (o.getClass().getName().compareTo("Truc") == 0) {
  // je voudrais utiliser ici mon object Truc
} else if (o.getClass().getName().compareTo("Machin") == 0) {
  // je voudrai utiliser ici mon objet Machin
} else if (o.getClass().getName().compareTo("Bidule") == 0) {
  // je voudrai utiliser ici mon objet Bidule
}
C'est bien beau, mais les méthodes d'un Truc, d'un Machin, ou d'un Bidule ne sont évidemment pas disponibles dans un Object. Ca doit probablement n'être qu'un détail, mais comment faire ?

Merci