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

Java Discussion :

instanceof ou getClass()?


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2013
    Messages : 23
    Points : 28
    Points
    28
    Par défaut instanceof ou getClass()?
    bonjour,
    j'ai une classe Figure dont heritent deux classes Rectangle et Circle.
    Je definis un tableau de Figure qui contient aussi bien des object de type Rectangle que des objets de type Circle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Figure [] figure = new Figure[10];
    for (int i=0; i<5; ++i) figure[i]=new Rectangle();
    for (int i=5; i<figure.length; ++i) figure[i]=new Circle();
    je souhaite dans une methode compter le nombre de figures de type Rectangle et de type Circle dans le tableau de Figure. Je dispose pour cela de deux facons d'apres le livre que je lis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // first approach 
    if (figure[i].getClass() == Rectangle.class ) 
     
    // second method
    if (figure[i] instanceof Rectangle)
    Sauriez-vous laquelle est a recommander? (desole ce sont des questions certainement inutiles, mais j'essaie d'avoir les bonnes pratiques des le debut)
    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Utilise instanceof.

    La première solution ignore les sous-classes, ce que, dans 99.9% des cas, tu ne veux pas faire.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2013
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    bonjour, merci pour la reponse mais ca veut dire quoi exactement "ignore les sous-classes"? Ici Rectangle herite de Figure et les deux approches retournent la meme chose.
    merci (je suis pas informaticien a la base)

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si Carre hérite de Rectangle, la comparaison avec getClass() ignorera les Carre, alors que, clairement, on veux compter les carrés comme des Rectangle.

    Pour faire plus simple pour expliquer, vu ton code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (figure[i].getClass() == Figure.class )
    retournera false dans tous les cas. Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (figure[i] instanceof Figure )
    retournera true dans tous les cas!

    Sachant que dans la réalité, on a souvent des sous classes d'une classe donnée sans nécessairement s'en rendre compte, il est beaucoup mieux d'utiliser instanceOf, sous peine de devoir tout recoder le jour ou on rajoute une nouvelle classe

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2013
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Merci pour l'explication, c'est tres clair.

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

Discussions similaires

  1. Héritage, getClass, instanceof, casting
    Par tichadok dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2008, 17h56
  2. [Generics] getClass manière generique?
    Par Hikage dans le forum Langage
    Réponses: 3
    Dernier message: 23/06/2006, 11h38
  3. [JAR] Faire l'inverse de getClass().getResources()
    Par lerotou dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 21/05/2006, 21h41
  4. [débutant][Conception] Modélisation pour éviter le getClass()
    Par Oliveuh dans le forum Général Java
    Réponses: 9
    Dernier message: 28/06/2004, 20h00
  5. Problème avec GetClass
    Par JerryMouse dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/10/2003, 19h03

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