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 :

Filtrage de types dans un Vector


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut Filtrage de types dans un Vector
    Salut à tous !
    Voilà mon problème. J'ai deux classes Classe1 et Sous-Classe1 (Sous-Classe1 hérite de Classe1).
    Par ailleurs, j'ai un Vector contenant des éléments de types Classe1 (c'est à dire pouvant être de type Classe1 ou Sous-Classe1).
    J'aimerais, par exemple, ne récupérer que les éléments de type Sous-Classe1 de ce vector ?
    Comment faire autrement que par des instanceof ?
    J'avais pensé mettre des méthodes (renvoyant un boolean) dans chaque classe.
    Selon la classe dans laquelle on se trouverait on renverrait false ou true. Par surcharge, il suffirait juste d'appeler le nom de la méthode correspondant au test que l'on veut faire. L'ennui, c'est que c'est pas vraiment envisageable s'il y a beaucoup de classes...

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Le instanceof a mauvaise presse, pourtant je trouve que c'est ce qu'il y a de plus lisible, de plus évident, et de plus connu, et je ne vois pas vraiment l'avantage par rapport à de la POO canonique.

    Bon pour la POO canonique, enfin telle que je la connais, il faut utiliser le pattern du visiteur. Voir ceci et même cela.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Je pense qu'utiliser le visiteur alourdit inutilement ici, étant donné que j'ai finalement très peu de méthodes (et même, je suis sûr qu'il n'y en aura aucune à ajouter dans le futur).
    A partir d'une classe B sous-classe (par héritage) d'une classe A, sachant qu'il y a un attribut en plus, ne peut on pas tester pour l'objet classe A, si cet attribut existe ? (avec getField ?)
    Sachant que c'est pour faire un parcour d'un vector et éliminer tous les éléments qui sont du super type, je cherche un truc suffisamment efficace
    Merci

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pourquoi vouloir à tout prix utiliser autre chose qu'instanceof, alors que c'est précisément fait pour cela

    • Je ne vois trop l'intérêt de faire une méthode qui indiquerait le type de l'objet (en plus ce ne serait pas très sûr car rien ne dit qu'une classe fille n'implémenterait pas incorrectement cette méthode).
    • Et la solution qui consiste à vérifier un champs par la reflection est encore pire : non seulement cela ne garantie rien mais ce doit être plus couteux



    Tu as au moins essayé avec instanceof ? Tu as des problèmes de performances ?

    a++

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Nan en fait j'ai rien tester encore, mais j'ai toujours entendu dire que instanceof était à éviter...et donc je voulais quelques avis. Mais bon je vais l'utiliser, étant donner que ca simplifie effectivement... De toute façon, j'aurais pas une quantité énorme de choses dans mes vector.

    @++

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    C'est les codes comme celui-ci qu'il faut éviter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (obj instanceof A) {
        obj.methodA();
    } else if (obj instanceof B) {
        obj.methodB();
    } else if (obj instanceof C) {
        obj.methodC();
    }
    C'est généralement une erreur de conception, et une méthode commune aurait eu plus de sens, ce qui permet de faire un traitement sans se soucier du type.


    Mais ici le coeur de ton traitement doit sa baser sur le type de l'objet, donc instanceof s'impose. Utiliser la reflection via getfield() est une erreur encore pire pour moi : on utilise un code pas sûr (cela ne garantie pas que le type soit correct) et pas forcément très logique...


    Bref parce que tu as entendus dire qu'instanceof était à éviter, tu vas utiliser un truc encore pire !!!

    Si vraiment tu veux te passer d'instanceof, alors il ne faut pas mélanger les types dans ton vecteur...


    a++

Discussions similaires

  1. recherche d'un objet de type tableau dans un vector
    Par sandy07 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/06/2007, 09h16
  2. Réponses: 1
    Dernier message: 27/07/2005, 17h08
  3. créer un type dans une fonction javascript
    Par amelhog dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/07/2005, 13h54
  4. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39
  5. "Différence de type dans une expression" Tquery
    Par Hakim dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/04/2004, 00h22

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