Forum Programmation.java Mettre un objet "end of stream" dans une queue paramétrée

Posté par  (site web personnel) .
Étiquettes : aucune
0
25
juin
2007
J'utilise une BlockingQueue[1] pour implémenter un traditionnel producteur-consommateur en java 1.5. Afin d'être un bon gars, je termine le consommateur lorsqu'il voit un objet end of stream (voir la doc pour l'explication de l'intérêt de l'objet end of stream). Mon problème, c'est que je veux rendre ma classe qui wrappe le consommateur générique (pour éviter des casts aux utilisateurs de ma classe) ; e.g. au lieu de spécifier une interface pour les objets à ajouter dans la queue (ou de laisser des Object passer), je veux utiliser un type générique T ; du coup, je n'arrive pas à écrire mon objet end of stream : je ne peux ni implémenter ni étendre le type T.

Pour illustrer :

- j'ai une classe "public class Consommateur<T>"
- dedans j'ai une "private BlockingQueue<T> queue"
- pour produire, j'appelle "addElement(T)" qui rajoute dans la queue
- pour consommer, le consommateur bouffe des T aussi bien sûr
- et pour terminer, je souhaite faire addElement(EndOfStream) mais je n'arrive pas à "écrire" la classe EndOfStream puisque je ne peux ni hériter ni implémenter T

Une idée ?

[1] http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent(...)
  • # Encapsulation du T dans une classe "Message"

    Posté par  . Évalué à 1.

    remplace la "private BlockingQueue queue" par une "private BlockingQueue< Message >", ou Message contient un reference vers un T, qui peut etre null pour signifier le EndOfStream (ou un flag, ou autre...).
    Les consommateurs recoivent des Message, ils accedent a la valeur via un accesseur (toujours pas de cast).

    Petite remarque en passant : les EndOfStream c'est bien quand tu connais le nombre de consommateurs a arreter (je ne sais pas si c'est dans la doc, je ne l'ai pas lue...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.