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 :

Traitement indépendemment de l'instance


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut Traitement indépendemment de l'instance
    Bonjour

    voici mon problème qui est en somme toute bête mais là je ne vois pas la solution:
    j'ai un objet (org.apache.xmlbeans.XmlObject) que je reçois en paramètre d'une méthode. Cet objet peut être une instance de plusieurs classes (potentiellement une dizaine de classes)
    J'aimerai appliquer un traitement à cet objet qui doit être le même quelque soit l'instance de la classe.
    Mais j'aimerais éviter quelque chose du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (myObject instanceof Classe1){
        //traitement sur mon objet;
    }else if myObject instanceof Classe2){
        // //traitement sur mon objet;
    }
    les traitements sont les mêmes car en fait je caste l'objet dans la bonne classe et une fois que c'est fait le traitement est redondant
    Est-ce que quelqu'un aurait une idée ?
    merci

    PS: version JRE 1.5

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public typeRetour traitement(XmlObject xmlObject){
      //les traitements ici
    }
    A+.

  3. #3
    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
    Tu le caste dans la classe / interface commune à tous ces objets et tu utilise les méthodes sur cette interface. Je suppose dans ton cas, mais sans être certain, que c'est le type XmlAnySimpleType que tu cherche.

  4. #4
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Tout d'abord merci à tous les deux
    Finalement je n'ai pas le choix, car l'interface commune à mes sous classes et XmlObject et forcément celle-ci n' pas les méthodes fonctionnelles de mes sous classes

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 46
    Par défaut
    Bonjour,

    Ce que tu souhaites faire est possible. Il suffit que tu utilises l'introspection.
    Je te conseil de lire ceci

    Un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Object o = new Point();
    		Class classO = o.getClass();
     
    		try{
    			Method m1 = classO.getMethod("setX", Double.TYPE);
    			m1.invoke(o, new Double(45));
    			System.out.println(((Point)o).getX());
     
    		}catch(Exception e){
    			System.out.println("Erreur...");
    		}
    Dans l'exemple, à partir d'un Object (de type Point) on appel la méthode setX(int x) sans faire de transtypage.

  6. #6
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Bonjour

    merci Romano; ce que tu m'as donné m'a bien aidé et j'ai pu factorisé une grande partie de mon code
    Par contre je reste coincé sur un problème
    En invoquant une méthode je trouve une liste d'objet dont je ne connais pas la classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Class[] paramTypes = null;
     Object[] args  = null;
     Method methode1 = myObject.getClass().getMethod("maMethodeXXXX",paramTypes);
     
      Object object1 =  methode1.invoke(myObject, args);
       Method methode2 = object1.getClass().getMethod("getXXXArray",paramTypes);
     
      Object objet2 = methode2.invoke( object1, args);
       List<?> liste = new ArrayList(Arrays.asList(objet2));
        Iterator<?> iterator = liste .iterator();
    //PS: pour simplifier j'ai supprimé les try catch
    L'appel à la méthode 2 renvois un array d'objet c'est pour cela que je peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     List<?> liste = new ArrayList(Arrays.asList(objet2));
    Mon point de blocage est lorsque je veux parcourir ma liste et que je veux appeler une méthode sur l'objet récupérer dans mon iterator

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     while (iterator.hasNext()) {
         Object current = iterator.next();
         Method  methode3= current .getClass().getMethod("getYYYY",paramTypes);
    }
    Et j'ai une belle exception :
    java.lang.NoSuchMethodException : nom de la classe
    Et pourtant la méthode existe bien pour la classe de mon objet current
    Je sais que les types génériques ne sont pas récupérées durant le runtime et je crois que le problème vient de là.
    Si vous avez une idée je suis preneur. Merci encore

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

Discussions similaires

  1. Timer: 1 ou 2 instances pour 2 traitements ?
    Par RudyWI dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 30/09/2011, 15h31
  2. Réponses: 0
    Dernier message: 24/11/2009, 11h36
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Rafraichissement de la fenetre pendant le traitement
    Par Bobx dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/02/2003, 15h13
  5. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44

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