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 :

Appel de méthode de façon générique


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 93
    Par défaut Appel de méthode de façon générique
    Bonjour,
    Soit la classe ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class test {
     private String nom;
     private String prenom;
     
     public void majNom() {...}
     public void majPrenom() {...}
     
     public void maj (String val) {
      // ici
     }
    }
    J'aimerais, dans la méthode maj(), faire un appel de majNom ou majPrenom, en fonction de la valeur du paramètre "val".
    Savez vous comment je peux procéder ?
    Merci d'avance.

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 702
    Par défaut
    Je suis pas sur d'avoir compris. C'est ca que tu veux faire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public void maj (String val) {
        if(val.equals("nom")) majNom();
        if(val.equals("prénom")) majPrenom();
     }
    Sinon, ça serait bien que tu précise un peu parce que ton explication ne me parait pas très claire.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Tu peux aussi faire une inversion de control :
    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
    19
    20
    21
    22
    23
    24
    25
     
    public interface Delegate {
        public void call(Origin origin);
    }
     
    public class MajNomDelegate implements Delegate {
        public void call(Origin origin) {
            origin.majNom();
        }
    }
     
    public class MajPrebomDelegate implements Delegate {
        public void call(Origin origin) {
            origin.majPrenom();
        }
    }
     
    public class Origin {
        public void majNom() {}
        public void majPrenom() {}
     
        public void maj(Delegate delegate) {
            delegate.call(this);
        }
    }
    Cela évite de faire une vérification sur le paramètre passé à la méthode générale.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 93
    Par défaut
    uther, c est ce que je veux faire sauf que comme dit verbose, je ne veux pas faire de test sur la valeur de val car il peut y avoir un nombre consequent de choix.
    Par contre verbose, je n ai pas bien compris le principe de l IoC ici. Peux tu etre plus explicite stp ?

  5. #5
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 702
    Par défaut
    D'accord, je comprend mieux. Tu cherches à appeler la méthode par introspection.
    C'est faisable en java même si je ne pense pas que ce soit une bonne façon de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public void maj(String val) {
            try {
                Method m = this.getClass().getMethod("maj" + val, null);
                m.invoke(this, null);
            } catch (Exception ex) {
                System.out.println(val + " non défini");
            }
        }

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Citation Envoyé par eyango Voir le message
    Par contre verbose, je n ai pas bien compris le principe de l IoC ici. Peux tu etre plus explicite stp ?
    Le pattern IoC consiste à déléguer le flux de control d'une application. En général, cette délégation est faite à un framework, ici c'est une implémentation basique.

    Dans le premier exemple du Uther, la classe principale a la responsabilité d'appeler la méthode idoine. Dans l'exemple que je t'ai fourni, cet appel est délégué à un Delegate. Ainsi, la classe principale ne controle plus quelle méthode est finalement appelée.

    PS: j'ai modifié mon exemple, j'avais oublié de spécifier l'implémentation de l'interface Delegate

  7. #7
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 93
    Par défaut
    Merci à vous,
    vos explications et exemples m'ont permis d'apprendre de nouvelles choses en java et surtout de résoudre mon problème.

    Merci encore

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

Discussions similaires

  1. Appeler une méthode dynamiquement
    Par doof dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2005, 23h15
  2. Comment l'appel à une méthode virtuelle....
    Par Blobette dans le forum C++
    Réponses: 7
    Dernier message: 07/12/2004, 13h55
  3. appel entre méthodes de meme classe
    Par frmaniako dans le forum C++
    Réponses: 8
    Dernier message: 10/09/2004, 22h55
  4. [Débutant] [JSP] Appel de méthode
    Par Crazyblinkgirl dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 10/09/2004, 11h10
  5. [Débutant] Héritage & appel de méthodes
    Par KooX dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2004, 23h37

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