Bonjour,

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 variable


  
On 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;

        }
      }

Répondre à