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 :

Appeler une fonction dont le nom dépend d'une variable


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Appeler une fonction dont le nom dépend d'une variable
    Bonjour,

    J'ai un problème que je n'arrive pas à résoudre.

    J'aimerais, lorsque je suis dans une boucle, appeler une fonction en fonction de l'indice de cette boucle.
    Par exemple: getTheJour1() quand l'indice de la boucle est 1, getTheJour2() quand l'indice est 2, ....

    Est-il possible de "concaténer" un nom générique "getTheJour" avec une variable pour appeler une fonction ?
    Ou alors, existe-t-il une fonction qui appelle la fonction dont le nom est passé en paramètre ? (exemple: "callTheFunction(String nomDeFonction)")


    PS: je sais qu'il aurait été plus simple de faire "getTheJour(int compteur)", mais je n'ai, ici, pas le choix.

  2. #2
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    Slt
    Si tu tiens vraiment a faire ca, alors utilise la reflection.
    Maintenant, c'est pas un comportement communement utilisé en Java...

    http://ricky81.developpez.com/tutori...flection/#L3.4
    Non, Vahid n'est pas mon prénom
    c' est gratuit , aussi

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Cthulhu 22
    PS: je sais qu'il aurait été plus simple de faire "getTheJour(int compteur)", mais je n'ai, ici, pas le choix.
    Effectivement, la réflexion est le bon moyen d'arriver à faire cet appel dynamiquement (pendant l'exécution du programme).

    Mais ta question cache peut-être un autre problème, pourquoi n'as-tu pas le choix ? Peux-tu montrer un peu de code ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Je vais aller regarder du coté de la reflection, cela devrait pouvoir m'aider.

    @eric.lemerdy> je n'ai pas le choix car, dans ma boucle, j'ai un objet qui contient un certain nombre de champs String nommé jourX.
    Dans ma boucle, je tourne un nombre Y de fois (Y est inférieur à X)

    Et, à chaque itération, je dois récupérer le jourX (getJourX()) puis l'affecter (obj.setJour(X, value)).

    Je pourrais écrire de fonction qui testerait la valeur, et renverrait la bonne (getJour(X)) mais cela me limiterait puisque ce ne serait pas 100% dynamique.


    Merci à vous, je n'ai plus qu'a me pencher sur cette API.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Points : 151
    Points
    151
    Par défaut
    Salut Cthulhu 22,

    En faisant : callTheFunction(String nomDeFonction) tu passes en paramétre le resultat de la fonction nomDeFonction et c'est n'est rien d'autre qu'un passe de paramètre. Et çà marche.

    Mais ce que tu veux faire c'est je pense ce qu'on appelle "pointeur de méthode" qui existe dans des langages comme Delphi mais pas en java.

    Et l'introspection te permet d'interoger une classe sur son propre type ( la reflexivité) !!!

  6. #6
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Cthulhu 22
    @eric.lemerdy> je n'ai pas le choix car, dans ma boucle, j'ai un objet qui contient un certain nombre de champs String nommé jourX.
    Dans ma boucle, je tourne un nombre Y de fois (Y est inférieur à X)
    C'est toi qui a fait le design? Tu as le droit de le modifier ? ^^

    Tu les récupères d'où ces "String" nommés jourX?
    Pourquoi ne peux-tu pas faire un getter nommé getJour(int x), et donc utiliser simplement des entiers dans ta boucle?

  7. #7
    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
    Sinon autre solution comme de toute facon tu dois les ecrire tes methode getJourX, tu fait un classe abstraite qui a une methode getJour().
    Tu crees les sous-classes avec le code qui va bien pour getJour() tu as ainsi Jour1, Jour2, ...

    Tu crees un tableau d'objets jours et chaque case du tableau recoit une instance de la classe qui correspond a l'indice.

    Instance de Jour1 dans la case 1
    Instance de Jour2 dans la case 2...

    Pour appeler la bonne methode tu fais directement:
    Tu as un peu plus d'ecriture mais ce sera plus performant que la reflection au niveau temps d'execution.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par ®om
    C'est toi qui a fait le design? Tu as le droit de le modifier ? ^^

    Tu les récupères d'où ces "String" nommés jourX?
    Pourquoi ne peux-tu pas faire un getter nommé getJour(int x), et donc utiliser simplement des entiers dans ta boucle?
    Je ne peux malheureusement pas modifier le fait qu'il y a des jourX.

    J'ai fini par faire un getJour(x) accessible par l'objet qui comporte les jourX.

    Cela à un avantage: c'est transparent au niveau de la boucle, mais dans mon design, j'ai "swich(x) case ..." pour savoir quel jour il faut retourner.

    @bulbo> cette solution parait intéressante, je verrais ce que je pourrais faire lorsque je voudrais être 100% dynamique.


    Merci beaucoup à tous

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

Discussions similaires

  1. appeler une fonction dont le nom est dans un parametre
    Par djams9 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/06/2011, 11h42
  2. Réponses: 3
    Dernier message: 05/02/2007, 09h41
  3. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  4. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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