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

API standards et tierces Java Discussion :

[Reflection] Instancier un objet


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Points : 16
    Points
    16
    Par défaut [Reflection] Instancier un objet
    bonjour à tous,
    j'essaie d'instancier un objet de facon dynamique.

    mon prog recupere le nom de la classe à instancier. ensuite je souhaite instancier un objet du type de ma classe, puis lancer une méthode de cette objet.

    voici le code que j'ai mais qui ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Class myClass=null;
    String methodName=null;
     
    try {
    myClass=Class.forName("com.bast.MaClasse");
    	methodName = "analyseXml";
    	Class[] types = new Class[] {};
    	Method method = myClass.getMethod(methodName, types);
    	Object result = method.invoke(myClass, null);
    	int value = ((Integer)result).intValue();
     
    	}catch (Exception e) { System.err.println("Erreur " + e +" => "+ methodName); }
    ce bout de code plante au niveau de l'invoke:
    [erreur]
    Erreur java.lang.IllegalArgumentException: object is not an instance of declaring class => analyseXml
    [/erreur]

    je ne vois pas trop ou se situe l'erreur si quelqu'un connait un peu ces process je suis preneur

    merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    A mon avis, il manque justement l'instance sur laquelle tu veux appeler la méthode, donc je pense qu'il faut rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object myObject = myClass.newInstance();
    et la methode invoke de l'objet Method doit être appelée avec en paramètre cette instance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object result = method.invoke(myObject, null);
    Julien

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    bien vu l'ami ca marche

    je met le code complet au cas ou quelqu'un cherche ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Class myClass=null; 
    String methodName=null; 
     
    try { 
    myClass=Class.forName("com.bast.MaClasse"); 
       methodName = "analyseXml"; 
       Class[] types = new Class[] {}; 
      Object myObject = myClass.newInstance();
       Method method = myClass.getMethod(methodName, types); 
       Object result = method.invoke(myObject, null);
       int value = ((Integer)result).intValue(); 
     
       }catch (Exception e) { System.err.println("Erreur " + e +" => "+ methodName); }
    merci encore

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: reflection java
    Salut,

    Tu n'as simplement pas instancier ton objet
    Citation Envoyé par bl@st
    ensuite je souhaite instancier un objet du type de ma classe
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myClass=Class.forName("com.bast.MaClasse");
    permet juste d'obtenir un objet de Type Class qui contient des informations sur la classe depuis son nom.

    Pour l'instancier tu dois ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Object myInstance = myClass.newInstance();
    puis il faut invoquer la méthode sur l'instance obtenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object result = method.invoke(myInstance, null);
    Dans ton cas tu essayais d'exécuter la méthode analyseXml() de la classe Class mais bien sur elle n'existe pas...

    a++

    [edit] désolé j'ai mis un peu de temps à poster je n'ai pas vu le message de poinclin...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,

    Tu n'as simplement pas instancier ton objet


    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myClass=Class.forName("com.bast.MaClasse");
    permet juste d'obtenir un objet de Type Class qui contient des informations sur la classe depuis son nom.

    Pour l'instancier tu dois ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Object myInstance = myClass.newInstance();
    http://java.sun.com/javase/6/docs/ap...va.lang.Object, java.lang.Object...)

    Note au passage: malgré que la java doc dit: "If the underlying method is static, then the specified obj argument is ignored. It may be null."

    Il faut avoir au préalable instancié la classe avant de faire un appel sur une méthode statique!



    Je dis ceci car ta réponse m'a donné la solution à mon problème

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/03/2011, 18h55
  2. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  3. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  4. Réponses: 6
    Dernier message: 18/01/2006, 16h26
  5. instancier un objet Excel
    Par RobinNono dans le forum ASP
    Réponses: 1
    Dernier message: 13/12/2005, 15h51

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