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 :

classe générique ?


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut classe générique ?
    bonjour,
    je parse un document xml, et j'obtient une List<ElementType> d'elements, ces elements peuvent être de different type ElementType Text, Code à barre, forme geometrique, des graphic);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class TextArea extends ElementType
    class Graphic extends ElementType 
    .......................
    j'utilse jaxb pour le parsing,
    je dois remplir une List<myElement> à partir de List<ElementType> qu'a générer jaxb, (myElement hérite de ElementType),
    ce que j'ai fait :
    - qu'on la List<ElementType> est générée, j'appele la methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public boolean addElement( ElementType element, String type) { 
     
        myElement newElement = myElement(type);
     
        newElement.setType(???element.Type);//setType est définit dans myElement
        newElement.setSource(???element.Source);//même chose
        newElement.setDisplayCode(???element.DisplayCode);//même chose
     
        elementList.add(newElement);//ma List<myElement>
       return true;
    }
    seulement l'attribut Type, Source et DisplayCode sont définit pour les types pas pour ElementType, du coût je ne peut pas faire :
    j'ai pensé de casté element qui est un ElementType en son type çàd TextArea ou Graphic ou...
    je dois faire un truc genre :
    , or type est un String, j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Class.forName(type))element
    ça na pas marché
    si vous avez des suggestions j'en suis preneur
    merci

  2. #2
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Par défaut
    Hello,

    Je crois que tu as un petit problème de conception.

    Cela dit, pour ton souci,


    Si elementType est bien une classe abstraite, ajoute une méthode getType(), getDisplayCode() etc...qui renvoientt la bonne String dans tes classes enfants.



    J'espère avoir bien compris ton souci...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    rebonjour,
    elementType n'est pas abstraite.
    j'ai besoin soit de caster directement elementType (qui peut être un Text, Graphic ...), en son type, cela dis je ne sais pas comment obtenir son type depuis elementType (c vrai elementType ne contient pas de methode qui renvoie le type, elle générée automatiquement par jaxb).
    soit depuis le fichier xml, çàd, obtenir une instance d'un element, et sa valeur
    merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la création de méthodes abstraites dans ElementType est le plus sage. Sinon, il te reste la possiblité de faire plein de instanceof pour tester le type, et en fonction du instanceof, faire un typecasting explicite et appeler la méthode qui t'intéresse.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    mais si je fait un instanceof il va me donner la ElementType pas les sous classes ? non ?
    corrige moi si je me trompe !

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (element instanceof TextArea){
       TextArea t = (TextArea) element;
       // tu as maintenant accès aussi aux méthodes définies dans TextArea
       // .....
    }

Discussions similaires

  1. Utilisation d'une classe générique
    Par bandit_debutant dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2006, 16h54
  2. Réponses: 3
    Dernier message: 05/10/2006, 17h15
  3. [C# 2.0] Un exemple de classe générique qui ne compile pas.
    Par Pierre8r dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h11
  4. [C#][ADO] Classe Générique ADO
    Par tscoops dans le forum Accès aux données
    Réponses: 2
    Dernier message: 15/11/2005, 14h21
  5. [Generics] Classe générique
    Par norkius dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 15h57

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