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());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 ?
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();
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...
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 ?
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 }
Merci
Partager