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 :

Ecouter une liste


Sujet :

Langage Java

  1. #1
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut Ecouter une liste
    hello,

    Dans la série "je martyrise les listes", je voulais savoir s'il existe en java le moyen d'être notifié lors d'ajout et de suppression d'élément dans une liste ?

    L'idée est de pouvoir intercepter les ajouts par exemple, pour faire un traitement.

    Ou encore interdire une opération.

    Merci !

    Anthony

    PS : j'en appelle à vos connaissances, si ça n'existe pas je saurai me débrouiller !

  2. #2
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Tout à fait possible avec cette lib: http://publicobject.com/glazedlists/...azedLists.html

    C'est une lib robuste, employée dans le projet Spring RCP.

  3. #3
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Hmmm c'est bon ça !

    Je vais voir les aspects de licence...

    Merci en tout cas, je ne connaissais pas !

    Anthony

  4. #4
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Par contre, j'ai l'impression que tu es prévenu après que l'opération soit effectuée ?

    Dans mon cas, je dois parfois interrompre un ajout par exemple si l'objet ne respecte pas certaines conditions.

    Anthony

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Fait ta propre implémentation de List dans ce cas.

  6. #6
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Oui... Je suis un peu fainéant et donc si certains se sont déjà penché sur le problème et que je peux bénéficier de leur travail...

  7. #7
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    Reprends le principe des listes non-nulles que je t'ai donné et rajoute un Listener (que tu peux créer intégralement, c'est toi le maître de ton code ) qui sera appelé à chaque commande pour jeter une exception (fait la hériter de RuntimeException ou Error pour ne pas géner l'interface List).

  8. #8
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Une implémentation propre, c'est peut être pas l'idéal. D'abord parce qu'on peut vouloir diverses stratégie d'implémentations qui conservent pour autant le même principe de notification évènementielle. Ensuite parce que le code que tu fais, c'est une source de bug supplémentaire et du code à maintenir en plus.

    Ce que je te conseille pour ton cas, c'est un pattern proxy. Prends cette lib, google list (qui atomise les common collections), et implémente juste le système de notification en partant d'un ForwardingList<E>.

  9. #9
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par Tommy31 Voir le message
    Une implémentation propre, c'est peut être pas l'idéal. D'abord parce qu'on peut vouloir diverses stratégie d'implémentations qui conservent pour autant le même principe de notification évènementielle.
    Sous forme de wrapping ça limite les bugs quand même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MaList implements List {
     
        private List wrapper = new ArrayList();
     
        public void add(Object obj) {
            // mon test d'ajout
            wrapper.add(obj);
        }
     
        // etc.
     
    }

  10. #10
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    C'est très précisément la solution que j'ai proposée

  11. #11
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut


    Le plus délicat pour la liste, c'est qu'il y a des opérations indirectes... Je veux dire par exemple, pour la méthode retainAll(), il faut gérer un évènement de supression pour les éléments qui seront supprimés... (il faut les déterminer)

    Pareil pour les Iterator qui permet des modificaitions de la liste... bref, ce n'est pas un proxy trivial.

    En tout cas, je vais regarder tout ça pour voir si je peux m'en inspirer pour améliorer ma solution.

    Anthony

  12. #12
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Exact, le retainAll s'adresse à l'itérateur de la liste, qui désigne la liste proxifiée et non le proxy.

    Seule solution garantie à 100% est le recours a un aspect weavé. C'est propre, élégant mais ca nécessite une mise en oeuvre plus lourde.

  13. #13
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    Tiens, c'est dommage... Il existe :

    com.google.common.collect.Constraints.constrainedList(List<E> list, Constraint<? super E> constraint)

    mais malheureusement, ils n'ont pas poussé le concept assez loin car ils ont effectivement Constraints.NOT_NULL mais l'interface Constraint n'a qu'une méthode checkElement(E element)... On ne peut pas distinguer un ajout, d'une suppression.... (enfin je pense qu'elle est appelée uniquement en cas d'ajout)

    Anthony

  14. #14
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    ouaip c'est sur que d'introduire de l'AOP pour ça, c'est pas toptop... je passe plutot par un adaptateur dans mon cas qui a le role de sous-proxy vers l'itérateur.

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

Discussions similaires

  1. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  2. Faire une liste de device??
    Par jackjack dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2003, 14h43
  3. Réponses: 4
    Dernier message: 24/04/2003, 22h28
  4. Générer une liste
    Par pfredin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/04/2003, 15h30
  5. tri d'une liste
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2003, 18h08

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