IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Connaitre toutes les instances d'une classe [FAQ]


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 60
    Points
    60
    Par défaut Connaitre toutes les instances d'une classe
    Bonjour

    Je voudrai connaitre toutes les instances créée d'une classe.
    en fait je recupere a partir d'un fichier binaire (grace a la serialisation) un ensemble d'objet de classe connu. et je voudrais faire un traitement sur ces objets.

    Savez vous comment faire?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 144
    Points
    144
    Par défaut
    Bonjour,

    A l'intérieur de ta classe A tu crée une collection STATIQUE "list" contenant toutes les instances de A et dans le constructeur de ta classe A tu ajoutes this à ta list...
    je viens de me relire j'ai pas l'impression d'etre super clair ... lol .. bon voilà un aperçu de code :

    /**
    *
    */

    import java.util.ArrayList;

    /**
    * Created the 8 janv. 2006 at 12:26:23
    *
    *
    */
    public class MaClasse {
    /**
    * _instanceList of MaClasse
    */
    private static ArrayList _instanceList;

    /**
    *
    */
    public MaClasse() {
    if (_instanceList == null) {
    _instanceList = new ArrayList();
    }
    _instanceList.add(this);
    }

    /**
    * @return the MaClasse instance list
    */
    public static ArrayList getAllInstances() {
    return _instanceList;
    }

    }
    J'ai pas testé mais ça devrait etre bon.

    Ps : j'ai pas mis entre pour colorer le mot clé statique à ne pas oublier
    PPs: apres tu accèdes à ta liste comme d'hab avec un méthode statique : MaClass.getAllInstances()

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    +1, cela correspond à ce que j'aurais fait

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    heu en fait tu as une erreur dans ton constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (_instanceList != null) { 
    _instanceList = new ArrayList(); 
    } 
    _instanceList.add(this);
    est faux, il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (_instanceList == null) { 
    _instanceList = new ArrayList(); 
    } 
    _instanceList.add(this);

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 144
    Points
    144
    Par défaut
    lol effectivement j'ai codé ça à la va-vite sans tester ( pas tapper ! j'ai dis pas taper ! )

    donc je vais éditer mon code de ce pas car sinon tu auras des nullPointerException dès le premier appel au constructeur lol

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 60
    Points
    60
    Par défaut
    bonne idée mais quand on serialise on n'utilise pas le constructeur de la classe, je croyais qu'il y avait une methode pour connaitre tous les objets instancié (mais sans les instancier moi meme vu que j'utilise la serialisation pour recuperer les objets)

    mon probleme c'est que je n'arrive pas a serialiser des variables de classe (le _instancelist)

    la méthode que j'utilise est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      //Lecture du fichier;
    ObjectInputStream in=new ObjectInputStream(new FileInputStream("fichier.sav"));
    personne pers1=(personne)in.readObject();
    in.close();
    ya til une autre methode pour serialiser les variables de classe?

  7. #7
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par miniseb
    ya til une autre methode pour serialiser les variables de classe?
    non, on ne peut pas sérialiser des variables "static", ni les "transient"...

    mais lors de la désérialisation, tu ne peux pas ajouter les instances directement dans la liste ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ObjectInputStream ois = ...
    Object o = ois.readObject();
    deserializedInstances.add(o);
    ...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    On peut aussi utiliser JVMPI (Java Virtual Machine Profiler Interface) ou depuis 1.5, JVMTI (Java Virtual Machine Tools Interface). Il faut ecrire du code natif mais cela permet de compter les instances de n'importe quelle classe, meme celles qu'on n'a pas ecrit ou dont on a pas le code source (on pourrait d'ailleurs le faire aussi par injection de code avec de l'AOP je suppose). J'aime bien l'approche JVMTI car il suffit de ne pas charger l'agent depuis la commande en ligne pour faire disparaitre la fonctionnalite. Puisque JVMTI repose sur JNI, c'est une communication dans les deux sens : les infos recuperees par l'agent peuvent etre transmises au code Java.
    Romain Guy
    Android - Mon livre - Mon blog

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par kisame
    A l'intérieur de ta classe A tu crée une collection STATIQUE "list" contenant toutes les instances de A et dans le constructeur de ta classe A tu ajoutes this à ta list...
    Salut,

    Un tel procédé ne génère-t-il pas une fuite de mémoire ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 144
    Points
    144
    Par défaut
    Surement, mais en quoi ? N'étant pas un expert, il y a très certainement pas un truc que j'ai pas vu mais je ne vois pas.

  11. #11
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    ben non, c'est come une autre liste, de plus en java y aps de fuite de mémoire y a le Garbage Collector
    "vaste programme"

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Le GC ne peut libérer que les objets qui ne sont plus référencés. Tant qu'elles sont dans la liste statique, les instances de A ne sont pas disponibles pour le GC. Il faut penser à vider la liste quand tu n'en as plus besoin.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Tu peux passer par un factory qui a chaque creation d'un objet mets a jours une liste unique ( un singleton) liste que tu pourrais serializer en paralele !!!

    Le factory gereras la liste et les objets (creation , suppression, serialization) !
    UML avec VIOLET

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 144
    Points
    144
    Par défaut
    Effectivement mangeur, j'ai pas pensé à la destruction

  15. #15
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Tu peux aussi regarder du cote des WeakReferences.
    Romain Guy
    Android - Mon livre - Mon blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. WMI : Nom de toutes les instance d'une classe
    Par Chachane dans le forum C++
    Réponses: 1
    Dernier message: 02/07/2010, 15h34
  2. Connaitre les instances d'une classe donnée
    Par pip1000 dans le forum Langage
    Réponses: 1
    Dernier message: 23/04/2009, 16h04
  3. Utilisation de toutes les instances d'une classe dans un while
    Par canaboss dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 28/04/2008, 15h28
  4. Accéder à toutes les instances d'une classe
    Par MrGecko dans le forum Delphi
    Réponses: 15
    Dernier message: 14/05/2007, 00h50
  5. connaitre toutes les occurences d'une chaine
    Par semaj_james dans le forum C
    Réponses: 2
    Dernier message: 11/12/2005, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo