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 :

Comment éviter un CAST ou instanceOf avec un objet unmarshalle


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 101
    Par défaut Comment éviter un CAST ou instanceOf avec un objet unmarshalle
    Salut,

    Je n'arrive pas à savoir comment faire...

    Description des classes :
    - 1 interface Message
    - 1 classe MessageAA extends Message
    - 1 classe MessageBB extends Message
    - 1 classe TraitementMessage

    Mon objectif est de faire ceci dans ma classe TraitementMessage
    Message messageAA = new MessageAA();
    traitementMessage(messageAA);

    Message messageBB = new MessageBB();
    traitementMessage(messageBB);
    C'est à dire que j'ai 2 méthodes traitementMessage() pour chaque type de Message qui font un traitement différent.

    Bien sûr, la solution serait de "caster" les appels de méthodes ou de faire des "instance of" mais je souhaite eviter cela. Dans mon application je reçois un message de type Message venant d'un unmarschall d'un objet MessageAA ou MessageBB.

    Exemple :
    MessageAA -> Marshall en Message -> sendTo -> UnMarshall en Message -> traitementMessage
    J'ai essayé avec un Message<T> généric mais
    traitementMessage(Message<MessageAA> m)
    est equivalent à
    traitementMessage(Message<MessageBB> m)
    J'espère avoir été assez clair, c'est pas facile à expliquer !

    Merci de votre aide

    Obélix

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Si j'ai bien compris il suffit simplement de passer un objet Message comme argument de ta méthode et ensuite le polymorphisme fera le reste. Java appelera la bonne méthode.

    Bien sur il est nécessaire que Message est une méthode traitement, et ensuite de redéfinir cette méthode dans MessageAA et MessageBB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void traitementMessage(Message m) {
    ...
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 101
    Par défaut
    tu as bien compris, ta proposition est logique et correcte...
    mais j'ai oublié de préciser que je dois extraire le traitement des Message* pour avoir une architecture séparée entre les Message* et le traitement des Message*

    Impossible de mettre une méthode traitement dans chaque Message et faire jouer le polymorphisme

    Merci de ton aide

Discussions similaires

  1. Comment faire de la defensive copie avec un objet de type Collection
    Par l_informaticien dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 20/01/2013, 21h56
  2. Réponses: 0
    Dernier message: 31/03/2010, 18h12
  3. Réponses: 3
    Dernier message: 05/02/2010, 14h09
  4. Réponses: 2
    Dernier message: 28/06/2009, 10h03
  5. Comment éviter les bookmarks invalides avec les TADOQuery
    Par david_chardonnet dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2008, 16h54

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