Là, on va pouvoir répondre ! Il faut que tu fasses de l'introspection d'objets. Le code en exemple sérialise un objet dans un fichier et le reste du code utilise l'objet sérialisé en aveugle : récupération de l'objet, appel de méthode, de variables ...
La méthode getDeclaredFields() doit t'intéresser.
Eric
N. COLLIN a écrit:
Hello, Je dois récupérer toutes les variables d'une classe qu'au départ je ne connais pas et afficher leur nom et leur contenu. Le but est d'imprimer à l'écran les différents valeurs que prennent ces variables au cours de l'exécution.Exemple une classe qui exécuterait les instr suivantes a = 1 ; b = 2 ; a = b * 2 ; b = b + a ; En sortie, j'aurais un texte du style Après l'exécution de la 1ère instr : a = 1 Après l'exécution de la 2ème instr : a= 1 et b = 2 Après l'exécution de la 3ème instr : a = 4 et b = 2 Après l'éxécution de la 4ème instr : a = 4 et b = 6 Mais à priori, je ne connais pas le contenu de la classe ! Je dois pouvoir récupérer le nom des variables 'a' et 'b' ainsi que leur contenu. Bonne journée à tous et merci Nathalie ----- Original Message ----- From: "Nicolas Delsaux" <[EMAIL PROTECTED]> To: "N. COLLIN" <[EMAIL PROTECTED]> Sent: Wednesday, August 27, 2003 9:07 AM Subject: Re: récupérer ke nom d'une variableOn Tue, 26 Aug 2003 22:31:31 +0200, N. COLLIN <[EMAIL PROTECTED]> wrote:Zut ... ça ne m'arrange pas du tout ... Car je ne connais pas le nom de la variable justement ...Comment ça, tu ne connais pas le nom de la variable ? Tu veux afficher le contenu d'une chaîne de caractère dont tu ne connais pas le nom, c'est ça ? Est-ce que tu peux nous expliquer un peu plus clairement ce que tu veux, s'il-te-plaît ? -- Nicolas Delsaux "Ia démocratie est la pire des dictatures parce qu'elle est la dictature exercée par le plus grand nombre sur la minorité."
************************************************************************************************** The contents of this email and any attachments are confidential. It is intended for the named recipient(s) only. If you have received this email in error please notify the system manager or the sender immediately and do not disclose the contents to anyone or make copies. ** eSafe scanned this email for viruses, vandals and malicious content ** **************************************************************************************************
package reflection;
import java.lang.reflect.*;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
public class DumpMethods {
public static void main(String args[])
{
try
{
MyObject obj1 = new MyObject();
obj1.setP3(8.1234F);
obj1.myMethod1(4,"aaaaaaaaaaa");
System.out.println("** Objet : ");
System.out.println(obj1.toString());
//Write an object in a file
FileOutputStream FileOS = new FileOutputStream("..\\MyObject.ser");
ObjectOutputStream myObjectOS = new ObjectOutputStream(FileOS);
myObjectOS.writeObject(obj1);
myObjectOS.flush();
//read an object in a file
FileInputStream FileIS = new FileInputStream("..\\MyObject.ser");
ObjectInputStream myObjectIS = new ObjectInputStream(FileIS);
Object anObject = myObjectIS.readObject();
//Print all the Object method
Class cls = anObject.getClass();
Method m[] = cls.getDeclaredMethods();
Field f[] = cls.getDeclaredFields();
System.out.println("** Listes des m�thodes de l'objet s�rialis� par introspection : ");
for (int i = 0; i < m.length; i++) System.out.println(m[i].toString());
for (int i = 0; i < f.length; i++) System.out.println(f[i].toString());
//Call myMethods on the object.
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Class.forName("java.lang.String");
Method meth = cls.getMethod("myMethod1", partypes);
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new String("bbbbbbbbb");
Object retobj = meth.invoke(anObject, arglist);
//The object is different
System.out.println("** invocation d'une m�thode et r�sultat sur l'objet");
System.out.println(anObject.toString());
//Close all the streams
myObjectOS.close();
FileOS.close();
myObjectIS.close();
FileIS.close();
}
catch(IOException ioe)
{
System.err.println(ioe);
}
catch (Throwable t) {
System.err.println(t);
}
}//End Main
}
package reflection;
import java.util.Hashtable;
import java.util.Vector;
import java.io.Serializable;
import java.util.Enumeration;
public class MyObject implements Serializable
{
byte m_compteur = 0;
String [] m_allText = new String [5];
int m_p2 = 1;
float m_p3 = 1.1F;
Hashtable m_p4hashTable = new Hashtable(10,10);
public float getP3()
{
return m_p3;
}
public void setP3(float value)
{
m_p3 = value;
}
public void myMethod1(int i,String text)
{
String [] p1Tab = new String [2];
p1Tab[0] = text + (i+m_p2);
p1Tab[1] = text + (i+m_p3);
m_p4hashTable.put(new Byte(m_compteur),p1Tab);
if (m_compteur < 5)
{
m_allText[m_compteur] = text;
}
m_p2 += i;
m_p3 += i;
m_compteur++;
}
public String toString()
{
String result;
result = "compteur courant : "+m_compteur+"\r\n";
for (int i = 0; ((i < 5) && (i < m_compteur)); i++)
{
result += "allText["+i+"] : "+m_allText[i]+"\r\n";
}
result += "p2 : "+m_p2+"\r\n";
result += "p3 : "+m_p3+"\r\n";
for (Enumeration enum=m_p4hashTable.keys(); enum.hasMoreElements(); )
{
Byte compteur = (Byte) enum.nextElement();
String [] p1Tab = (String []) m_p4hashTable.get(compteur);
result += "compteur : "+compteur.byteValue()+" - "+"p1Tab[0] : "+p1Tab[0]+"\r\n";
result += "compteur : "+compteur.byteValue()+" - "+"p1Tab[1] : "+p1Tab[1]+"\r\n";
}
return result;
}
}
