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] Executer une fonction dont le nom est contenu dans un String


Sujet :

API standards et tierces Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [Reflection] Executer une fonction dont le nom est contenu dans un String
    Bonjour,
    Je desire créer une fonction generique qui me liste une serie d'éléments... puis qui execute une fonction sur ces éléments.
    La fonction dera specifique à chaque traitement que je veux realiser je voudrai donc mettre le nom de la fonction dans un attribut de type String.
    Comment puis-je faire pour executer une fonction dont le nom est specifié dans un String.

    Merci pour vos reponses... là je suis un peu bloqué

  2. #2
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 116
    Points
    116
    Par défaut
    http://www.developpez.net/forums/vie...54378&start=15
    exécuter classes et méthodes dynamiques...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Salut, tout est dans les classes java.lang.Class et java.lang.Method :
    - Class.forName("MaClasse") : retourne un objet "Class" de classe "maClasse" (mais pas une instance de MaClasse, attention)
    - maClasse.getMethod("maMethode", Class[]) : retourne une instance de "Method" réprésentant la méthode "maMethode" prenant comme paramètres la liste spécifiée (tableau de Class => 1er paramètre de classe A, 2e paramètre de classe B, etc)
    - maMethode.invoke(objet, Object[]) : invoke ta méthode sur l'objet "objet" avec les paramètres stockés dans le tableau d'objets
    Pour plus d'infos : JDK
    A+

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Tu es sur qu'il n'y aurait pas une solution plus elegante a ton probleme ?

    Est-ce que l'utilisateur peut choisir le type de traitement ?

    Est-ce que tous les elements supportent les meme traitements ?

    Moi je passerais plutot par une interface (au sens java du terme) et chaque element implementerait les differents traitements a sa maniere...

    Bulbo

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Tu dois récupérer la méthode de ton objet à partir de son nom sous la forme d'un objet Method:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Objet tonObjet = new Objet();
       Class objetClass = home.getClass();
        Method methodCreate = homeClass.getDeclaredMethod("la methode", "les paramètres de ta méthode");
    Ensuit tu invoques celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     retour = (Object) methodCreate.invoke(tonObjet, null);
    Voilà j'espère que cela va t'aider, si tu as d'autres questions n'hésite pas

    Esk

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci... je test tout ca immediatement!

  7. #7
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    A mon avis le mieux serait l"héritage:

    - tu crée une classe Abstraite (ou une Interface) avec la méthode commune que tu veux exécuter... (elle aura le même nom dans tout les cas).

    - tu sous-classes cette classe abstraite et tu implémentes la méthode abstraite pour exécuter tout tes différents traitements ,

    - et puis tu crée un factory (par exemple) qui te renvoie le bon objet dont le sous-type est ta classe abstraite (et donc la bonne méthode à exécuter)...

    C'est pas plus élégent (sauf si tu as 200 traitements différents ce qui peut être assez lourd --> surtout la classe Factory)...

    A+

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Je trouve tout de meme plus elegant de prevoir lors du design des classes que les elements puissent subir divers traitements que de maintenir une liste de nom de methode a appeler par element ..

    Cette methode n'est pas tres objet, la reflection est un petit plus java mais ne fait pas partie de tout les langages objets ..

    Pour la lourdeur: un appel dynamique de methode par element, c'est pas mal aussi dans le genre ..

    Bulbo

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    hé bien MERCI.....
    j'ai reussi a faire ce que je voulais grace à votre aide.

    PS : Il y en a t-il que on deja testé les script de IBM Rational XDE? C'est tout en Java et je vais travailler dessus pendant quelque temps... sympa mais... sympa!

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

Discussions similaires

  1. MACRO de copie d'une feuille dont le nom est contenu dans une cellule
    Par youssy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/03/2015, 19h39
  2. [XL-2007] Sélectionner une feuille dont le nom est contenu dans une cellule
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2014, 20h47
  3. Réponses: 3
    Dernier message: 07/01/2010, 16h54
  4. Instancier une classe dont le nom est contenu dans une String
    Par fyque dans le forum Général Python
    Réponses: 15
    Dernier message: 13/06/2008, 12h33
  5. Réponses: 7
    Dernier message: 25/10/2005, 15h19

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