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 :

caster un objet avec un type generique ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 caster un objet avec un type generique ?
    bonjour,
    peut-on caster un objet sans connaitre son type avant l'execution;
    je m'explique :
    j'ai un methode commun entre plusieurs objets, elle a un objet de type classe mere (pas une interface), et un field (c le nom de l'objet qu'on va cree):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maMethode(Element elt, Field field)
    j'ai plusieurs objets (Elt1, Elt2) qui étend la classe Element,
    je veux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void maMethode(Element elt, Field field) {
    Element newElt = (field) elt; //comme les generique
    }
    est-ce qu'il ya une solution ?
    merci

  2. #2
    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,


    Je ne comprend pas trop ce que tu veux faire !
    Tu n'aurais pas un exemple concret ?

    a++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Je n'ai pas très bien compris ton problème ...
    dans tous les cas il faut regerder dans l'introspection.

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public boolean cast(Toot toto,Class c){		
    		return c.isInstance(toto);	
    	}
    avec ce code tu test si toto est du type c

    dans ton cas on pourrait faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public boolean cast(Toot toto,Field field){		
    		return field.getType().isInstance(toto);	
    	}
    Edit ou mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public voidmaMethod(Element elt,Field field){		
    		if (field.getType().isInstance(elt)){
                        Element newElt = elt; 
                        }	
    	}

  4. #4
    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,
    en faite, je parse un document xml avec jaxb, j'ait different classes,
    mon document xml contient plusieurs type d'elements genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <root>
    <Text>....</Text>
    <Graphic>....</Graphic>
    <BarCode>...</BarCode>
    </root>
    dans les classes générées par jaxb, j'obtient la classe :
    qui étend les elements Text, Graphic...
    j'ai creer une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monElement extends ElementType
    quand je parse mon document xml, j'obtient une List<ElementType> que je dois remplir les elements dans ma liste List<monElement>,
    donc je parcour la List<ElementType>, chaque element trouve je fait un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(element instance of Text) 
    addElement(element, "Text");
    if(element instance of Graphic) 
    addElement(element, "Graphic");
    .....
    je peut traiter chaque element, mais je veux pas refaire les memes instructions pour chaque elements;
    donc addElement est commun pour tout les elements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void addElement(ElementType elt, String field) {
    monElement newElt = (field) elt; //si field = "Text" alors le cast : (Text) elt
    }
    merci

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Le mécanisme de filtre n'existe pas en java ... et c'est bien dommage
    tu peux t'en tirer en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public static List filtre(List<Element> l,Class c){
    		List res = new ArrayList();
    		for (Element elt : l){
    			if (c.isInstance(elt)){
    				res.add(elt);
    			}
    		}
    		return res;
    	}
    et ça à l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		List<Element> lJaxb = null;
    		List<SubElement1> l1  = filtre(lJaxb,SubElement1.class);
    	}
    par contre tu te retrouves avec des warnings de type safety

    tu dois pouvoir faire mieux en l'adaptant à ton cas

Discussions similaires

  1. Problème de type d'objet avec xmlbeans
    Par nicocolt dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 31/08/2009, 15h10
  2. Réponses: 3
    Dernier message: 31/10/2008, 14h17
  3. Copie d'un objet avec un attribut de type vector
    Par yassine480480 dans le forum C++
    Réponses: 7
    Dernier message: 02/08/2008, 09h53
  4. Sort avec un type objet
    Par amazircool dans le forum Langage
    Réponses: 3
    Dernier message: 08/10/2007, 08h04
  5. Objet d'un type initialisé avec un autre type.
    Par Pragmateek dans le forum C++
    Réponses: 28
    Dernier message: 30/03/2006, 20h06

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