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 :

Recuperation du nom des parametres


Sujet :

Java

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    75
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 75
    Par d�faut
    Bonjour,

    J'ai une classe du genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class MyClass {
     
        public void afficherArguments(String chaine, int a) {
            System.out.println(chaine + a);
        }
     
    }
    J'aimerais r�cuperer le nom des param�tres... ex: chaine, a

    Dans une autre classe j'ai :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Class uneClasse = Class.forName("MyClass");
     
    Method methodes[] = uneClasse.getDeclaredMethods();
     
    for (int i = 0; i < methodes.length; i++) {
    System.out.println(methodes[i].getName());
    System.out.println(methodes[i].getReturnType());
    }
    Est il possible de recup�rer ces noms de parametres de la meme facon ?

    Cordialement.

    (Suite)

    J'ai egalement:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
     //Recuperation des parametres pour chaque methode
    Class param[] = methodes[i].getParameterTypes();
     
    for (int j = 0; j < param.length; j++) {
    mesParam += param[j].getSimpleName() + ";";
     
    }
    Mais j'obtient seulement le type de ces parametres et non leur nom.

  2. #2
    Membre chevronn� Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    D�tails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Par d�faut
    je ne veux pas me m�ler de tes affaires, mais que va t'apporter de plus de connaitre les noms de parametres ?

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    75
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 75
    Par d�faut
    Je ne peux m'en passer pour certains tests...

  4. #4
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    D�veloppeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par d�faut
    Je ne vois pas l'int�r�t qu'il y a � conna�tre les noms des param�tres d'une fonction...
    La surcharge de m�thodes peut se faire � partir du moment o� les types des arguments de la m�thode diff�rent. Tu peux � partir de ce concept g�rer les arguments que tu veux (int, String etc...)

    Expliques-nous ce que tu veux faire au final.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    75
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 75
    Par d�faut
    Ce n'est pas une question de surcharge de m�thodes les tests dont je parlais...

    En fait le projet existe en C# et un "p.Name" suffit. "p" �tant un objet ParameterInfo.

    Pour des raisons d'int�gration avec d'autres outils je dois le passer en Java et l� probl�me...

  6. #6
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    D�veloppeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par d�faut
    D'accord. Et un exemple d'utilisation de ce p.Name en C# ?

  7. #7
    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
    Par d�faut
    Malheureusement il me semble que �a n'est pas possible

    (d'ailleurs eclipse te met arg0, arg1... si tu n'as pas li� les sources)

    C'est un (gros) oubli

  8. #8
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    D�veloppeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par d�faut
    Citation Envoy� par �om Voir le message
    Malheureusement il me semble que �a n'est pas possible

    (d'ailleurs eclipse te met arg0, arg1... si tu n'as pas li� les sources)

    C'est un (gros) oubli
    En fait je ne vois pas du tout l'int�r�t de conna�tre le nom des arguments qui sont pass�s en param�tre. Ils ne pourront pas te servir de guide dans le code vu que l'on ne peut pas surcharger une fonction en ayant les m�mes types de param�tres. Il doit y avoir un moyen de proc�der autrement.

  9. #9
    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
    Par d�faut
    Citation Envoy� par muad'dib Voir le message
    En fait je ne vois pas du tout l'int�r�t de conna�tre le nom des arguments qui sont pass�s en param�tre. Ils ne pourront pas te servir de guide dans le code vu que l'on ne peut pas surcharger une fonction en ayant les m�mes types de param�tres. Il doit y avoir un moyen de proc�der autrement.
    Par exemple quand tu fais de la g�n�ration de code (� partir d'une interface r�cup�r�e par introspection), �a rend plus facile la lecture de la g�n�ration que des arg0 arg1...

    �a n'est qu'un exemple (c'est dans ce cas o� j'ai d�j� eu besoin de �a)

  10. #10
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    D�veloppeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par d�faut
    Citation Envoy� par �om Voir le message
    Par exemple quand tu fais de la g�n�ration de code (� partir d'une interface r�cup�r�e par introspection), �a rend plus facile la lecture de la g�n�ration que des arg0 arg1...

    �a n'est qu'un exemple (c'est dans ce cas o� j'ai d�j� eu besoin de �a)
    Ok dans ce cas-l� effectivement �a serait pratique. Il est vrai que je ne vois rien permettant de r�cup�rer autre chose que le type des variables dans l'API de base.
    Concernant les tests que voudrait faire le PO sur ces noms de variables, j'aimerais bien voir.

  11. #11
    Expert �minent
    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
    Billets dans le blog
    1
    Par d�faut
    Salut,


    Citation Envoy� par �om Voir le message
    C'est un (gros) oubli
    L'acc�s aux noms des param�tres via la r�flection �taient pr�vus pour Java 6 mais n'a finalement pas �t� prise en compte.

    A l'origine ils voulaient utiliser des annotations pour marquer les m�thodes/classes dont les noms de param�tre devaient �tre conserv�s...

    Mais ils ont finalement conclu que ce serait pr�f�rable d'int�grer cela par d�faut pour toutes les m�thodes, mais que cela impliquait plus de travail et de r�flection cela a �t� report� dans Java 7...

    Tout ceci est indiqu� dans la conclusion de la release finale de la JSR 270 :

    Reflective access to parameter names

    Original description:

    Practical experience with annotations has identified situations in which it�d be useful to be able to access the names of method and constructor parameter names. This is particularly relevant to JSRs 181 (Web-Services Metadata) and 224 (JAX-WS 2.0), but it may also be of use in other JSRs such as 255(JMX 2.0) and 274 (Design-Time API for JavaBeans).

    This feature will provide access to the names of constructor and method parameters at runtime via the reflection API. To do this effectively will probably require the introduction of a new core annotation, or perhaps a meta-annotation, to identify constructors and methods whose parameter names should be recorded in class files. Otherwise this feature would only work with class files containing full debug information; such class files are larger than is desirable in production settings.

    The JSR 270 Expert Group concluded, after a lengthy discussion, that it would be better to support reflective access to all parameter names, by default, rather than require the use of annotations or some other means to request that parameter names be recorded during the compilation of particular classes or interfaces. This is the cleanest approach from the standpoint of language design, it fills in one last gap in Java�s reflection facilities, and it removes any question as to whether or not parameter names will be available to applications.

    A consequence of making parameter names available by default is that programs may, intentionally or not, become dependent upon parameter names even though such names are not, strictly speaking, part of the signature of a constructor or method. After this change is made it will be dangerous to rename a parameter of any public or protected method or constructor in any published API. A change of this magnitude deserves wider, and longer-term, publicity and discussion than is possible in the remainder of the Java SE 6 development cycle. The JSR 270 EG therefore recommends that this more complete approach be pursued in Java SE 7.
    A noter qu'avec Java 6, les annotations/Processor ce doit �tre possible de le simuler...

    a++

  12. #12
    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
    Par d�faut
    Et bien merci adiGuba pour les compl�ments d'informations

  13. #13
    Expert �minent
    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
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par adiGuba Voir le message
    A noter qu'avec Java 6, les annotations/Processor ce doit �tre possible de le simuler...
    Comme j'avais en t�te de revoir mon tutoriels sur les annotations pour y traiter de la JSR-269 (Annotation Processing) et que je ne trouvais pas d'id�e originale pour illustrer mon propos, cette discussion m'a inspir�



    J'ai donc fait une annotation @UseParameterNames qui, lorsqu'elle est utilis�e sur une classe, permet de g�n�rer un fichier contenant les noms des param�tres...

    Ensuite � l'ex�cution il suffit d'utiliser la m�thode ParameterTools.getParameterNames(Method) � l'ex�cution pour r�cup�rer le nom des param�tres...

    Exemple :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    import java.lang.reflect.Method;
    import com.developpez.adiguba.annotation.ParameterTools;
    import com.developpez.adiguba.annotation.UseParameterNames;
     
    @UseParameterNames
    public class Main {
     
    	public static void main(final String... args) {
    		// On parcours les méthodes de la classe :
    		for (Method method : Main.class.getDeclaredMethods()) {
    			System.out.println(method.getName() + " : ");
    			// On récupère le type des paramètres 
    			Class<?>[] types = method.getParameterTypes();
     
    			// On récupère le nom des paramètres (si possible)
    			String[] names = ParameterTools.getParameterNames(method);
    			if (names!=null) {
    				// Et on affiche le tout :
    				for (int i=0; i<types.length; i++) {
    					System.out.println("\t" + types[i].getCanonicalName() + " " + names[i]);
    				}
    			}
    			System.out.println();
    		}
    	}
     
     
    	public void method() {
    	}
     
    	public void method(String str) {
    	}
     
    	public void method(String string, int anInteger) {
    	}
     
    	public void method(java.util.Date date) {
    	}
    }
    Ce qui affiche en r�sultat :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    main :
            java.lang.String[] args
     
    method :
     
    method :
            java.lang.String str
     
    method :
            java.lang.String string
            int anInteger
     
    method :
            java.util.Date date
    Pour cela il suffit d'inclure le jar contenu dans le fichier-joint au classpath lors de la compilation et de l'ex�cution. Ce jar utilise le principe un Processor pour g�n�rer un fichier properties contenant les noms de param�tres � l'ex�cution...

    Bien entendu c'est uniquement compatible Java 6 et cela n�cessite un compilateur strictement conforme (et en particulier qui prend en charge la JSR 269), ce qui n'est pas le cas d'eclipse 3.2 (aucune id�e pour le 3.3 je ne l'ai pas encore test�).


    C'est cod� assez vite et pas optimis� (le fichier Properties est lu � chaque appel de getParameterNames()), et je n'ai pas vraiment le temps de d�tailler le fonctionnement de tout cela... mais les codes sources sont fourni pour ceux que cela int�resse



    J'essayerai de d�tailler tout cela dans un joli tutoriel lorsque j'aurais un peu de temps


    a++
    Fichiers attach�s Fichiers attach�s

  14. #14
    R�dacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte syst�me
    Inscrit en
    D�cembre 2006
    Messages
    10 062
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Architecte syst�me
    Secteur : Industrie

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 10 062
    Par d�faut
    Citation Envoy� par adiGuba Voir le message
    aucune id�e pour le 3.3 je ne l'ai pas encore test�.
    Oui ca marche avec Eclipse 3.3, a condition bien sur d'autoriser les annotations dans les options de compilation du projet.
    ALGORITHME (n.m.): M�thode complexe de r�solution d'un probl�me simple.

  15. #15
    Expert �minent
    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
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par pseudocode Voir le message
    Oui ca marche avec Eclipse 3.3, a condition bien sur d'autoriser les annotations dans les options de compilation du projet.
    Ah Cool ! Il va falloir que je teste cela

    a++

  16. #16
    R�dacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte syst�me
    Inscrit en
    D�cembre 2006
    Messages
    10 062
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Architecte syst�me
    Secteur : Industrie

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 10 062
    Par d�faut Ze Quick How-To
    Citation Envoy� par How_to
    Menu Eclipse->Project->Properties...

    Java Compiler->Annotation Processing
    [x] Enable Project Specific settings
    [x] Enable Annotation Processing

    Java Compiler->Annotation Processing->Factory Path
    [x] Enable Project Specific settings
    Add Jars -> (indiquer le jar)

    OK
    et ca marche avec ton jar...
    ALGORITHME (n.m.): M�thode complexe de r�solution d'un probl�me simple.

  17. #17
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    75
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 75
    Par d�faut
    Encore un grand merci pour toute l'aide et informations apport�es...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. recuperer les noms des tables
    Par samyco dans le forum JDBC
    R�ponses: 6
    Dernier message: 31/07/2007, 10h12
  2. récupération du nom des tables
    Par romram dans le forum Access
    R�ponses: 2
    Dernier message: 06/12/2006, 14h16
  3. Recuperer le nom des menus
    Par thibal_kamehouse dans le forum Windows
    R�ponses: 4
    Dernier message: 02/05/2006, 17h59
  4. Recuperer le nom des menus
    Par thibal_kamehouse dans le forum C++
    R�ponses: 4
    Dernier message: 02/05/2006, 17h59
  5. comment recuperer le nom des champs ?????
    Par e11137 dans le forum PostgreSQL
    R�ponses: 3
    Dernier message: 09/01/2004, 10h00

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