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

Java Discussion :

Appel d'une méthode via une variable.


Sujet :

Java

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut Appel d'une méthode via une variable.
    Bonjour,

    J'ai une question bête mais que je n'arrive pas à me sortir de la tête.
    Je dois appliquer une méthode à tous les éléments de plusieurs tableaux à 2 dimensions. Cette méthode dépend d'un critère : calcul case par case de la moyenne des tableaux, de la médiane, etc.

    Afin d'avoir un code plus joli, j'aurai aimé éviter la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if (choix1) {
       for(...) {
          for(...) {
             [calcul]
          }
       }
    }
    else if (choix2) {
       for(...) {
          for(...) {
             [calcul]
          }
       }
    }
    else if (choix3) {
       [...]
    }
    Et je ne veux pas mettre le if dans les for pour ne pas retester une variable qui ne varie pas pendant le parcours des tableaux.

    Du coup, je me disais que ce serait sympa si je pouvais créer une variable String que j'affecterai avec le nom de la méthode à appliquer, et qu'ensuite je ferai quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    String methodName = "";
    if (choix1)
       methodName = "computeMean";
    else if (choix2)
       methodName = "computeMedian";
    [...]
     
    for(...) {
       for(...) {
          methodName();
       }
    }
    Malheureusement, cela ne marche pas.
    Quelqu'un peut-il me dire si y'a un moyen de faire ce genre de chose, ou si c'est vraiment farfelu?

    Merci d'avance!

  2. #2
    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
    Je ne connais pas ta structure du tout, mais tes choix peuvent être directement des classes qui implémentent une interface...

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    interface Calcul {
        double calcul(int i, int j);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Calcul choix = new Calcul() {
        public double calcul(int i, int j) {
            ...
        }
    };
     
    for(...)
        for(...)
            tab[i][j] = choix.calcul(i,j);

  3. #3
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Sinon via la reflexivité tu peux t'en tirer (je sais pas si c'est ce que tu veux, mais ca a l'air de se raprocher).
    La FAQ en parle, et donne de bon exemple sur comment appeler une méthode par une String, mais c'est gourmand en mémoire et CPU
    "vaste programme"

  4. #4
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    c'est un peu le meme probleme que j'avais poster ici : http://www.developpez.net/forums/sho...d.php?t=211236
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  5. #5
    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,

    Citation Envoyé par ®om
    Je ne connais pas ta structure du tout, mais tes choix peuvent être directement des classes qui implémentent une interface...
    Si tu utilises Java 5.0 et que tu as une liste de méthode fini, tu pourrais même utiliser une enum :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	public enum Calcul {
    		COMPUTE_MEAN {
    			@Override
    			public void compute() {
    				// TODO
    			}
    		},
     
    		COMPUTE_MEDIAN {
    			@Override
    			public void compute() {
    				// TODO
    			}
    		};
     
    		public abstract void compute();
    	}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Calcul = Calcul.COMPUTE_MEDIAN;
     
    for(...)
        for(...)
            tab[i][j] = Calcul.compute();

    a++

  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
    Ah ouais pas mal (mais faut avoir un nombre fini et non évolutif des méthodes de calcul).

    Justement, j'en suis à la page 204 de Thinking in Java 4th edition, où ça parle des énumérations (je connais l'utilisation de base mais pas tout dans le détail), je vais lire ça bientôt (tout le monde s'en fout mais bon )

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ok, merci pour les réponses.
    En fait, c'était juste une petite fantaisie qui m'était passée par la tête afin d'avoir un code un peu plus "présentable". Mais bon si c'est pour que ça demande plus de ressources, ça ne vaut pas le coup.

    Mais merci bien!

    PS : Pour adiGuba, je suis sous Java 1.4.2...

  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 seiryujay
    En fait, c'était juste une petite fantaisie qui m'était passée par la tête afin d'avoir un code un peu plus "présentable". Mais bon si c'est pour que ça demande plus de ressources, ça ne vaut pas le coup.
    Heu... Puisque tu utilises du 1.4.2 la solution de ®om avec les interfaces est simple à mettre en oeuvre et n'utilise pas vraiment plus de ressources...

    Par contre je ne pense pas que la réflection soit adapté à ton cas.

    Citation Envoyé par ®om
    Ah ouais pas mal (mais faut avoir un nombre fini et non évolutif des méthodes de calcul).
    Tu peux très bien faire évolué une enum en lui rajoutant de nouveaux éléments

    a++

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

Discussions similaires

  1. [PHP 5.3] [POO] Appel d'une méthode dans une méthode
    Par yann18 dans le forum Langage
    Réponses: 6
    Dernier message: 20/10/2011, 09h56
  2. Appeler une méthode d'une applet dans une jsp
    Par salmoucha10 dans le forum Applets
    Réponses: 1
    Dernier message: 11/01/2011, 19h25
  3. Réponses: 14
    Dernier message: 10/09/2009, 19h08
  4. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  5. Réponses: 2
    Dernier message: 31/08/2005, 16h12

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