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

Collection et Stream Java Discussion :

[Reflection] Lancer dynamiquement une méthode donnée d'un objet


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut [Reflection] Lancer dynamiquement une méthode donnée d'un objet
    Bonjour, j'ai ecrit un code qui permet de lancer dynamiquement une méthode donnée d'un objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    EpurationDonnees epurationDonnees = new EpurationDonnees((Logger) log);;
    Class[] paramTypes = null;
    Object [] args={connexionLec,vectorId.elementAt(i),rstLec.getString("INFO1"),infosUtilisateur};
    if(args != null)
    {
    	paramTypes = new Class[args.length];
    	for(int k=0;k<args.length;++k)
    	{
    		paramTypes[k] = args[k].getClass();
    	}
    }
    Method m = epurationDonnees.getClass().getMethod("EpurationMethode",paramTypes);
    m.invoke(epurationDonnees,args);
    Lorsque j'arriv sur cette ligne

    Method m = epurationDonnees.getClass().getMethod("EpurationMethode",paramTypes);
    je rencontre cette erreur
    une exception s'est produite:java.lang.NoSuchMethodException

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


    Il ne trouve pas la méthode...
    Le nom de la méthode et ses paramètres doivent être exactement les mêmes.


    Afficher les paramètres que tu passes à getMethod() comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( Arrays.toString(paramTypes) );
    Et montre nous comment est déclaré cette méthode dans le code...

    a++

    PS : C'est un exemple au moins ? Parce que si tu met le nom de la méthode en dur dans le code autant l'appeler normalement...

  3. #3
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    Oui c'est un exemple, j'ai mis en dur pour tester

    voici ce que j'ai dans paramTypes


  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
    Citation Envoyé par Diablo_22 Voir le message
    Oui c'est un exemple, j'ai mis en dur pour tester
    Le problème ne viendrait pas du premier paramètre, qui est du type COM.ibm.db2.jdbc.app.DB2Connection ?

    Pourrait-on voir la définition de la méthode ???

    a++

  5. #5
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    j'ai réecrit la fonction et sa fonctione bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    EpurationDonnees epurationDonnees = new EpurationDonnees((Logger) log);
    Object [] args={connexionLec,vectorId.elementAt(i),rstLec.getString("DVA_INFO1"),infosUtilisateur};
    Class c = epurationDonnees.getClass();
    Constructor[] ctors =  c.getConstructors();
    Method[] methodes = c.getDeclaredMethods();
    for (int k=0; k<methodes.length; k++)
    {
    	System.out.println(methodes[i]);
    	if(methodes[k].getName()=="EpurationMethode")
    	{
                    methodes[k].invoke(epurationDonnees,args);
    		break;
    	}
    }
    Je te remercie adiGuba pour l'aide

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(methodes[k].getName()=="EpurationMethode")
    							{
    								// ...
    							}
    						}

    ça fonctionne avec un ==???

  7. #7
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    oui sa fonctionne voila la ligne de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(methodes[k].getName()==rstLec.getString("nomMethode"))

  8. #8
    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
    Citation Envoyé par Diablo_22 Voir le message
    oui sa fonctionne voila la ligne de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(methodes[k].getName()==rstLec.getString("nomMethode"))
    Attention car c'est un coup de chance car les deux chaines doivent être interné... mais pour éviter de mauvais soucis il faut utiliser equals()...


    Comment comparer des chaînes de caractères ?

    a++

  9. #9
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    Merci pour l'info

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(methodes[k].getName().equals(rstLec.getString("nomMethode")))

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

Discussions similaires

  1. Reflection java sur une méthode static
    Par Proxy dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 01/03/2012, 16h47
  2. POO Appel dynamique à une méthode d'un objet
    Par thecanea dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/02/2011, 12h58
  3. Méthodes appelées par une méthode donnée
    Par Virgile le chat dans le forum NetBeans
    Réponses: 1
    Dernier message: 14/01/2008, 10h50
  4. Réponses: 7
    Dernier message: 30/08/2007, 15h17
  5. [Reflection] Exécuter une méthode donnée d'une classe
    Par schousso dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/06/2004, 11h35

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