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 :

getMethod-->et comment faire pour set?


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut getMethod-->et comment faire pour set?
    Bonjour,

    J'ai dans mon code des récupérations de variables par l'intermédiaire de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String myString = (String) object.getClass().getMethod("getMyString").invoke(object);
    L'objet vient d'un collection d'objet.

    Mais dans cette partie du code, j'ai aussi envie de fixer certaines variables de la classe mère de ces objets en question comme setMyNumber (des trucs calculés dans cette fonction).

    Mais le setMethod n'est pas prévu. Comment faire?
    Merci.

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    urgh?
    tu veux dire invoke? pour invoquer une méthode?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Hum, je peux pas trop t'en dire plus, je viens d'arriver sur ce projet et je connaissais pas cette façon de faire...
    getMethod est une méthode de Class et invoke une méthode de Method...

  4. #4
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    tu ne peux pas créer une méthode comme ça.
    tu peux :
    sur des objets Method faire une invocation
    sur des Objets Field mettre à jour une valeur

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    sur des Objets Field mettre à jour une valeur
    Ah, bon alors il faut que je fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object.getClass().getField("monChampDouble").setDouble(object, 5.3)
    object.getClass().getField("monChampString").set(object, "toto")
    Mais du coup ça voudrait dire que le champ monChamp doit être public?

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Pas nécessairement, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object.getClass().getField("monChampString").setAccessible(true);
    object.getClass().getField("monChampString").set(object, "toto");

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Hum, en fait j'ai l'impression que getField ne permet d'accéder qu'aux champs static de la classe.
    Pas du tout des variables accessibles par getter/setter...

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 568
    Points : 21 636
    Points
    21 636
    Par défaut
    Ce ne serait pas par hasard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.getClass().getMethod("setMyString").invoke(object, "hello");
    que tu cherchais ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Non, allez savoir pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.getClass().getMethod("getMyString")
    renvoit un objet Method alors que


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.getClass().getMethod("setMyString")
    NoSuchMethodException

  10. #10
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Peut-être par ce que cette méthode sans arguments n'existe pas.

    Essaie avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.getClass().getMethod("setMyString", String.class)

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Par contre, j'ai la réponse (donnée par un collègue finalement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                Class[] params={String.class};
                try{
                  Method method = object.getClass().getMethod("setMyString", params);
                  method.invoke(object, "toto");
                }catch(Exception e){
                  e.printStackTrace();
                }

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    lol, je vois que j'aurais aussi eu la réponse.
    Merci

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 10/03/2014, 20h40
  2. Réponses: 7
    Dernier message: 13/12/2003, 15h09
  3. comment faire pour developper des prog en win32
    Par rhodan51 dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 09/11/2003, 20h39
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 15h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 16h41

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