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 :

caster type Object en un autre type


Sujet :

Langage Java

  1. #1
    Membre actif Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Points : 232
    Points
    232
    Par défaut caster type Object en un autre type


    Je travaille sur un projet web avec struts avec EJB3.
    Mais le pb qui m'amène ici est plus général au langage java.

    J'ai 2 EJB qui sont :
    - DrEntity
    - DictEntity.

    Ces 2 classes possèdent les mêmes noms de méthodes à la différence que DictEntity possèdent 2 méthodes supplémentaires.
    J'ai volontairement séparés les 2 car elles représentent 2 tables différentes en BD

    Lorsque je récupère un enregistrement du DrEntity ou DictEntity, je veux initialiser les champs de mon bean avec.

    Mon problème est le suivant :
    afin de maintenir plus facilement mon code source, je ne veux pas dupliquer la fonction d'init de mon bean en fonction que je charge les données provenant de DrEntity ou DictEntity.

    Alors j'ai essayé ceci :
    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
     
    dr -> objet de type DrEntity déjà initialisé
    dict -> objet de type DictEntity déjà initialisé
    sType -> objet de type String déjà initialisé
    db -> objet qui represente mon bean déjà initialisé
     
     
    Object demande = null;
    if(sType.equals("dr")
       demande = dr;
    else
       demande = dict;
     
    db.setId(demande.getId());
    db.setNom(demande.getNom());
    Alors, jusque là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Object demande = null;
    if(sType.equals("dr")
       demande = dr;
    else
       demande = dict;
    ca marche, mais pour la suite, j'ai une erreur signalé par eclipse me disant que mon objet demande ne possède pas les méthodes getId() et getNom().

    Le résultat ne m'étonne pas, alors j'ai pensé au classe générique, mais dans mon cas, je ne sais pas comment l'appliquer

    Alors, si quelqu'un a une idée, je suis preneur, car j'ai horreur de dupliquer du code pour rien

    Merci d'avance
    Il y a de jeunes pilotes audacieux, il y a de vieux pilotes, mais il n'y a pas de vieux pilotes audacieux


  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Ca ne serait pas plus simple de faire une relation d'héritage entre tes objets ??

    [EDIT] oups, j'avais compris 2 champs supplémentaires ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est tout à fait normal que tu ne puisses pas appeler les méthodes sur Object puisque elle n'y sont pas déclaré...

    Si tes classes DrEntity et DictEntity sont complètement distinctes il est impossible de faire cela...

    Tu dois leurs donner un point commun en utilisant une interface commune, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface Demandeur {
        public String getId();
        public String getNom();
    }
    Interface qui devra bien sûr être implémenté par tes deux classes DrEntity et DictEntity.

    Ensuite il suffit d'utiliser ton interface à la place d'Object dans le code que tu as donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Demandeur demande = null; // On utilise l'interface
    if(sType.equals("dr")
       demande = dr;
    else
       demande = dict;
     
    db.setId(demande.getId());
    db.setNom(demande.getNom());
    a++

  4. #4
    Membre actif Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Points : 232
    Points
    232
    Par défaut
    Cool, je vais essayé de suite


    Citation Envoyé par adiGuba Voir le message
    Salut,


    C'est tout à fait normal que tu ne puisses pas appeler les méthodes sur Object puisque elle n'y sont pas déclaré...

    Si tes classes DrEntity et DictEntity sont complètement distinctes il est impossible de faire cela...

    Tu dois leurs donner un point commun en utilisant une interface commune, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface Demandeur {
        public String getId();
        public String getNom();
    }
    Interface qui devra bien sûr être implémenté par tes deux classes DrEntity et DictEntity.

    Ensuite il suffit d'utiliser ton interface à la place d'Object dans le code que tu as donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Demandeur demande = null; // On utilise l'interface
    if(sType.equals("dr")
       demande = dr;
    else
       demande = dict;
     
    db.setId(demande.getId());
    db.setNom(demande.getNom());
    a++
    Il y a de jeunes pilotes audacieux, il y a de vieux pilotes, mais il n'y a pas de vieux pilotes audacieux


  5. #5
    Membre actif Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Points : 232
    Points
    232
    Par défaut
    ça marche !!!!!!!!!!!!!!

    Un grand merci pour votre aide
    Il y a de jeunes pilotes audacieux, il y a de vieux pilotes, mais il n'y a pas de vieux pilotes audacieux


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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/04/2019, 18h52
  2. Réponses: 6
    Dernier message: 13/02/2014, 18h19
  3. Réponses: 2
    Dernier message: 23/04/2007, 00h41
  4. Objet d'un type initialisé avec un autre type.
    Par Pragmateek dans le forum C++
    Réponses: 28
    Dernier message: 30/03/2006, 20h06
  5. Réponses: 14
    Dernier message: 13/03/2006, 18h49

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