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 :

Reflexivité et methode java


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut Reflexivité et methode java
    Bonjour à tous,

    Alors je suis face à un problème épineux:
    - comment récupérer le context local d'une méthode java?
    Bon je m'explique

    en gros

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public void toto(Age a) {
     
    		Map h = new HashMap();
    		// ici h.put("a", a);
    	}
    Je veux rajouter dans la hashmap les paramètres de la méthode sans que je les connaisse à l'avance.

    De même avec les attributs et les variables locales ...


  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Si j'ai bien compris, tu veux insérer dans la map l'argument de la fonction, avec comme clef le nom qu'il a ?

    Partant de l'idée qu'une variable n'est pas liée à son nom, à mon avis c'est plutôt infaisable, mais...
    Cherche tjs de ce côté ci: http://java.sun.com/j2se/1.4.2/docs/...ang/Class.html
    et plus précisément http://java.sun.com/j2se/1.4.2/docs/...arameterTypes()

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Tu peux le faire par la techno des Aspect, donc avant ou après l'appel de la méthode.

    Impossible à mon avis par les APIs du JDK : rien dans la reflexivité ne te permet de désigner une variable paramètre.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Si j'ai bien compris, tu veux insérer dans la map l'argument de la fonction, avec comme clef le nom qu'il a ?
    Oui mais la clef est facultative (je peux mettre la string que je veux) c'est l'objet qui est important à conserver.

    Partant de l'idée qu'une variable n'est pas liée à son nom, à mon avis c'est plutôt infaisable, mais...
    J'avais cherché du côté de cette api et avait conclu que c'était impossible, une confirmation est toujours rassurante

    Tu peux le faire par la techno des Aspect, donc avant ou après l'appel de la méthode.
    C'est justement ce que je suis en train de tester (AspectJ)

    J'ai réussi à récupéré les objets mais pas les noms des poignées ...
    ce qui est je pense impossible tant que je me contente de travailler au niveau de la compilation :p


    en fait le point où je bute maintenant serais de récupérer les variables locales ..

    Merci de vos réponse

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Là ça devient plus cher
    As tu le code source des classes Java ? si oui il faut parser (il existe des parsers tout faits pour Java) et tu pourras récupérer toutes les informations que tu veux.
    Si tu n'as que le bytecode, là il faudra utiliser une bibliothèque comme ASM par exemple si ces infos existent toujours dans le bytecode généré (ce qui n#est pas forcément le cas je crois)

    A plus

  6. #6
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Je veux rajouter dans la hashmap les paramètres de la méthode sans que je les connaisse à l'avance.
    Moi ma question c'est : pourquoi faire ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Moi ma question c'est : pourquoi faire ?
    en gros pour pouvoir logger le contexte d'appel de la méthode :p, le tout sans toucher le code ....

  8. #8
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    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 698
    Par défaut
    Moi ma question c'est : pourquoi faire ?
    C'est aussi la question que je me pose. Je n'aime déjà pas trop utiliser la réflexion en temps normal. En général on veut simplifier mais on se retrouve avec quelquechose de souvent moins clair à comprendre pour quelqu'un qui ne connait pas le code et plus complexe pour le refactorring et le débuggage.
    Mais inspecter la méthode en cours me parait vraiment tordu.

    Je pense que tu devrais d'abord vérifier si tu ne peut pas te passer de ce genre de manipulations.

  9. #9
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    en gros pour pouvoir logger le contexte d'appel de la méthode :p, le tout sans toucher le code ....
    Dans ce cas-là, utilise les aspects. C'est typiquement un cas d'utilisation. Fais des recherches sur AspectJ par exemple.

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    de toutes facons, de l'extérieur de la méthode, tu ne pourra pas récupérer les variables locale: avant l'appel à la méthode, elle n'existent pas encore. Après l'appel, elles n'existent plus. Il n'y a que pendant que tu y a accès, dans ce cas, choisi à la mains dans tes appels log ce qui te semble judicieux de logguer (le contexte peux être quelque chose d'énorme pour peu que t'y aie de gros objets ) Quand au nom de paramètres, il faut le code source. tu peux pas le faire par réflection! (d'ailleurs, quand t'as pas les sources et que tu implémente une interface en t'aidant des template d'un un ide, il te tappe des noms de paramètres par défaut (arg0, arg1, arg3, ...)

    De plus, même pendant, le "contexte" de la méthode peux inclure des variables stockées directement dans les registres, suivant l'humeur du compilateur

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Patriarch24

    Dans ce cas-là, utilise les aspects. C'est typiquement un cas d'utilisation. Fais des recherches sur AspectJ par exemple.
    c'est ce que je suis en train de faire

    C'est justement ce que je suis en train de tester (AspectJ)

    J'ai réussi à récupéré les objets mais pas les noms des poignées ...
    ce qui est je pense impossible tant que je me contente de travailler au niveau de la compilation :p

    en fait le point où je bute maintenant serais de récupérer les variables locales ..
    tchize_

    de toutes facons, de l'extérieur de la méthode, tu ne pourra pas récupérer les variables locale: avant l'appel à la méthode, elle n'existent pas encore.
    Alors là on arrive à la limite de ma connaissance sur le compilateur

    Si j'ai bien compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	private static void test(int i) {
    		// TODO Auto-generated method stub
    		int celleLa = 100;
    		tutu(i);
    	}
    Dans ce code là si je met un pointcut methods();, puis je récupérer celleLa sur le code ajouté sur la méthode tutu ...

    Peut être faut il mieux utiliser les pointcuts?

    Quand au nom de paramètres, il faut le code source. tu peux pas le faire par réflection!
    Tout à fait d'accord sur ce point ( ni par aspect)

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    dans tutu, tu peux récupérer celleLa, mon debuggeur eclipse le fait, masi je sais pas si c'est possible sans démarrer la java en mode debug et en branchant un debuggueur dessus.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/03/2007, 19h28
  2. Appel d'une methode java dans un fichier jsp
    Par kodo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/05/2006, 13h46
  3. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/04/2006, 15h50
  4. [Applet] appel de methodes java en javascript
    Par soulhouf dans le forum Applets
    Réponses: 16
    Dernier message: 06/09/2005, 14h18
  5. [Reflection] Interpreter une chaine en une methode java
    Par shaun_the_sheep dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 09/10/2004, 15h11

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