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

Collection et Stream Java Discussion :

Un listener sur un HashSet ?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut Un listener sur un HashSet ?
    Bonjour à tous,

    existe-il un moyen de se tenir informé des changements (add et remove) que subit un HashSet (ou plus généralement une classe implémentant l'interface Set) ?

    Je n'ai rien trouvé d'autre que d'étendre la classe HashSet et d'y ajouter le support des listeners, mais si je pouvais m'épargner ce boulot je serais content.

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Bonjour,
    - d'abord plutôt que d'hériter, c'est plus souple de déléguer sur un Set que tu passe en paramètre, ainsi tu peut intercepter n'importe quel Set.
    (le même genre de fonctionnement que les Stream qui prennent en paramètre un Stream)

    Ensuite, pour la réalisation, c'est pas si galère:
    -soit tu le génère sous eclipse quit te permet de créer automatiquement la délégation sur toutes les méthodes d'un membre.

    -soit tu le fait par introspection (moins propre) en utilisant une classe Proxy:la méthode "invoke" est appelée pour tous les appels de méthodes d'une interface, et ensuite tu peux rappeller la vraie implémentation toujours par réflexion.
    cf.
    http://java.sun.com/j2se/1.4.2/docs/...ect/Proxy.html

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Salut,

    tout d'abord merci pour ta réponse.
    Je vais je pense adopter pour une classe qui délègue le travail sans passer par les méchanismes de reflection. Ce serait vraiment trop lourd je trouve pour ce genre de classes.

    Je débute en eclipse, comment génères tu les méthodes déléguées ?

    Merci encore

  4. #4
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Dans une nouvelle classe, tu déclare l'attribut de type Set.

    Tu fait bouton droit "Sources"-"Gernerate Delegate Methods" et tu sélectionne toutes les méthodes du Set.

    Ensuite tu peux faire implémenter Set à ta classe, et ça doit compiler.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut
    Salut je suis presque dans le même cas donc il fait faire :
    - créer une classe AdvancedSet par exemple.
    - ensuite on déclare une variable de type Set ou ArrayList selon notre cas...
    - On fait delegate methode ( en faite, je n'est pas trop compris ce qu'il faisais ? )
    - Et ensuite on fait quoi ? :s
    - A pour toutes les méthode on rajouter un paramètre de type Set ? ou l'on doit faire hériter notre classe de Set ou ArrayList ou...

    merci de votre aide


    [EDIT]
    En gros nous allons avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class DelegateSet
    {
       // Le set 
       private Set sets ;
     
       // Ecouter les évènements
       private Listener listener ;
     
        public DelegateSet(Set sets,Listenet list)
        {
                  this.sets  = sets ;
                  listener = list ;
        } 
     
        public boolean add(Object e) {
            listener.add(e);
            return sets.add(e);
        }
     
          .........
     
    }

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Citation Envoyé par deltree Voir le message
    Dans une nouvelle classe, tu déclare l'attribut de type Set.

    Tu fait bouton droit "Sources"-"Gernerate Delegate Methods" et tu sélectionne toutes les méthodes du Set.

    Ensuite tu peux faire implémenter Set à ta classe, et ça doit compiler.
    Merci beaucoup

  7. #7
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Je t'en prie, ça me faisait plaisir

    pour Damien77, si tu ne crée pas ton propre sujet:
    le but est de créer ton propre "Set" ou "List" ou autre et de l'utiliser en tant qu'interface, pour renvoyer tous les appels de méthode sur un "delegate" qui va faire le vrai travail (on dit aussi que c'est un Wrapper, il "enveloppe" le vrai objet).

    donc il faut que ton objet implémente l'interface, oublie le terme Listener qui est dédié aux Swing, il suffit d'ajouter le code nécessaire pour faire un traitement supplémentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public class MaClasse{
    public void monTraitement(String name, Object o){
    //Ici je capte la méhode "name" appliquée à l'objet "o"
    }
    }
    public class DelegateSet implements Set
    {
       // Le set 
       private Set set ;
     
       // Ecouter les évènements
       private MaClasse listener ;
     
        public DelegateSet(Set set)
        {this.set = set;
    listener = new MaClasse();
    }
     
     public boolean add(Object e) {
           maClasse.MonTraitement("add",e);
            return sets.add(e);
        }
     
    ...

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

Discussions similaires

  1. Listener sur JTable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 05/02/2009, 16h27
  2. Language]Listener sur booléen
    Par harris_macken dans le forum Langage
    Réponses: 9
    Dernier message: 12/06/2005, 00h25
  3. [LISTENER] sur l'insertion de cd
    Par divxdede dans le forum Multimédia
    Réponses: 2
    Dernier message: 03/07/2004, 11h28
  4. [JSlider] listener sur Jslider
    Par Garion dans le forum Composants
    Réponses: 4
    Dernier message: 31/05/2004, 13h33
  5. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14

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