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 :

Connaître la nature d'un objet


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut Connaître la nature d'un objet
    Bonjour,

    Dans une application, je dois gérer des membres du personnel d'un musée.
    J'ai donc une classe MembrePersonnel dont dérive des classes comme PersonnelScientifique ou Administratif....
    Tous les objets de ces classes sont stockés dans un Vector.
    Le problème c'est que j'aimerais connaitre la nature de l'objet qui se trouve dans le Vector lorsque je vais le relire car dans ma fenêtre j'ai un tabcontrol pour chaque personnel et donc pour le tab MembrePersonnel je ne veus afficher que les objets de cette classe et pas ceux des Scientifique ou Administratif.
    J'espère avoir été clair

    Merci

    Bonne soirée

  2. #2
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Bonsoir,
    Pourquoi ne pas utiliser l'opérateur instanceof couplé avec des tests ( des if par exemple ) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(employe instanceof PersonnelAdministratif){
         //faire des choses concernant le personnel administratif
    }
    if(employe instanceof PersonnelScientifique){
         //faire des choses concernant le personnel Scientifique
    }
    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Merci, je vais aller tester desuite.

  4. #4
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Astuce un peu bourrine : Creer une variable privee dans la classe parente, avec un get public et un set protected.
    L'instanciation de chaques classes fille met a jour la valeur de cette variable avec une valeur speciale.
    Le test de cette variable depuis la classe mere permet de savoir a partir de quelle classe elle a ete cree.

    Petite astuce pour montrer que des fois c'est pas si compliquer
    D'ailleur tout test sur les classes fait ca automatiquement ... a aprtir d'un variable "classname" de type string.
    Du moins sous delphi ca revenais a ca

  5. #5
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Je pencherai plus pour la solution de clorish.
    Cette variable privée pourrait être un type Enuméré.

    En revanche, je ne pense pas qu'il faille créer un variable d'instance au niveau de la super classe.
    Il faudrait juste définir une méthode abstraite get qui te renvoie le type enumeré. Chaque sous classe devra implémenter cette méthode en renvoyant le bon type énuméré.

    De cette manière chaque sous classe connaitra son identité.

    Ensuite, tu n'auras plus qu'a parcourir ton vector en faisant des comparaions sur ce type.

  6. #6
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    Citation Envoyé par afrikha
    Bonsoir,
    Pourquoi ne pas utiliser l'opérateur instanceof couplé avec des tests ( des if par exemple ) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(employe instanceof PersonnelAdministratif){
         //faire des choses concernant le personnel administratif
    }
    if(employe instanceof PersonnelScientifique){
         //faire des choses concernant le personnel Scientifique
    }
    @+
    Attention avec les operateurs "instanceof" lorsque les instances sont de type generique paramétré, le compilateur lèvera une exception. Plus exactement utiliser les methodes de "reflexions" "reflect", par ex.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Vector<? extends Personel> employes = new Vector<Personel>();
    employes.add(new PersonelAdministratif);
    employes.add(new PersonelScientifique());
    //(add()...)
    if(employes.get(3).getClass().equals(PersonnelAdministratif.class)) {}
    //...

  7. #7
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par broumbroum
    Attention avec les operateurs "instanceof" lorsque les instances sont de type generique paramétré, le compilateur lèvera une exception. Plus exactement utiliser les methodes de "reflexions" "reflect", par ex.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Vector<? extends Personel> employes = new Vector<Personel>();
    employes.add(new PersonelAdministratif);
    employes.add(new PersonelScientifique());
    //(add()...)
    if(employes.get(3).getClass().equals(PersonnelAdministratif.class)) {}
    //...
    Bonjour,
    Peux-tu détailler ce qui ne marcherait pas avec les génériques ? car je ne vois pas où est le problème.

    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Bonjour,

    Merci pour vos réponse. J'ai finalement utilisé la dernière méthode citée.

    Bonne journée

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

Discussions similaires

  1. Connaître la classe d'un objet
    Par ProgVal dans le forum Langage
    Réponses: 3
    Dernier message: 15/02/2010, 09h42
  2. connatre le type d'un objet
    Par samplaid dans le forum Langage
    Réponses: 2
    Dernier message: 19/02/2007, 09h36
  3. [2.0] Comment connaître les objets conservés en mémoire ?
    Par Pilloutou dans le forum Framework .NET
    Réponses: 3
    Dernier message: 21/11/2006, 18h33
  4. VB6 - connaître si un objet Form est chargé en mode MODAL
    Par CBleu dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/01/2006, 21h16
  5. [POO] Comment connaître le type d'un objet
    Par zizou39 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/03/2005, 09h46

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