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

API standards et tierces Java Discussion :

Probleme avec la recherche directe de methodes sur une Class (API java.lang.reflect) [FAQ]


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut Probleme avec la recherche directe de methodes sur une Class (API java.lang.reflect)
    Bonjour. Voici mon probleme, avec un exemple simple:

    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
     
    public class TestClass {
      public void afficheInt(int i) {
        System.out.println(i);
      }
      public void afficheInteger(Integer i) {
        afficheInt(i.intValue());
      }
    }
     
    public class TrouverMethodes {
      public static void main(String[] args) {
        Class maClasseDeTest = TestClass.class;
        Class[] arguments = { Integer.class };
        try {
          maClasseDeTest.getMethod("afficheInteger", arguments);
          System.out.println("methode trouvee");
        } catch (Exception e) {
          System.out.println("probleme!");
        }
        try {
          maClasseDeTest.getMethod("afficheInt", arguments);
          System.out.println("methode trouvee");
        } catch (Exception e) {
          System.out.println("probleme!");
        }
      }
    }
    Ma premiere recherche de methode se passe correctement, alors que la deuxieme lève une Exception "MethodNotFound". Ce n'est pas étonnant, cette méthode attend un paramètre de type "int" et non "Integer".

    Seulement voilà, je dois absolument réussir à obtenir la méthode afficheInt de ma TestClass via un "getMethod". Ma question est donc: comment faire, puisque getMethod attend comme 2e argument un tableau de Class et que l'argument "int" attendu par afficheInt est une primitive.

    (Note: pour ceux qui voudraient tester le code, il manque les "import", et mon tableau d'arguments n'est par typé car je travaille en java 1.4.2)

    Merci d'avance pour toutes vos idées.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Class[] arguments2 = { Integer.TYPE };
    		
    try {
    	maClasseDeTest.getMethod("afficheInt", arguments2);
    	System.out.println("methode trouvee");
    } catch (Exception e) {
    	System.out.println("probleme!");
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    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
    Je ne sais pas pourquoi (une intuition), mais j'ai l'impression que tu utilises l'introspection à mauvais escient...

    Dans quel but tu veux l'utiliser précisément?

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

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


    A noter que l'on peut également utiliser int.class, mais je ne suis pas sûr que cela fonctionne avec le JDK 1.4.2 (ca marche sûr sur le 5.0).

    a++

  6. #6
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par bulbo
    Je dirais meme plus:
    Effectivement... J'avais bien été voir la FAQ mais je n'avais pas trouvé le chapître sur la réflexivité. Toutes mes excuses!

    Citation Envoyé par ®om
    Je ne sais pas pourquoi (une intuition), mais j'ai l'impression que tu utilises l'introspection à mauvais escient...
    Dans quel but tu veux l'utiliser précisément?
    J'ai programmé cet exemple de façon à expliquer mon problème simplement. En réalité, je travaille sur une application dont le paramétrage est obtenu dynamiquement à partir d'un fichier de configuration XML.
    Or dans ce fichier de paramétrage, j'ai (entre autres) une liste de classes et de méthodes à invoquer dessus (avec leurs arguments). Comme je récupère toutes ces informations sous forme de texte, je suis (à mon grand regret d'ailleurs) obligé de travailler de la manière la plus générique possible et en utilisant la réflexivité.

    En tout cas, merci à tous pour vos réponses on ne peut plus rapides. Je peux passer ce post en résolu (même si je me retrouve maintenant avec un problème qui découle directement de la réponse... ;-) )
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  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
    Citation Envoyé par CyberChouan
    J'ai programmé cet exemple de façon à expliquer mon problème simplement. En réalité, je travaille sur une application dont le paramétrage est obtenu dynamiquement à partir d'un fichier de configuration XML.
    Or dans ce fichier de paramétrage, j'ai (entre autres) une liste de classes et de méthodes à invoquer dessus (avec leurs arguments). Comme je récupère toutes ces informations sous forme de texte, je suis (à mon grand regret d'ailleurs) obligé de travailler de la manière la plus générique possible et en utilisant la réflexivité.
    Oki

    C'est que ça arrive souvent que des gens utilisent la réflexivité pour appeler une méthode au lieu d'utiliser une interface

  8. #8
    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 CyberChouan
    J'ai programmé cet exemple de façon à expliquer mon problème simplement. En réalité, je travaille sur une application dont le paramétrage est obtenu dynamiquement à partir d'un fichier de configuration XML.
    On dirait du Spring...
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Citation Envoyé par pseudocode
    On dirait du Spring...
    On dirait meme plus généralement le pattern IOC non ?

  10. #10
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par pseudocode
    On dirait du Spring...
    Effectivement, j'ai déjà travaillé avec Spring et je suis tout à fait conscient que je suis en train de "copier" son système de chargement de paramétrage (et en moins bien). Cependant, je n'ai pas le choix... c'est le projet qui veut ça.

    Du coup, je crée et j'utilise des classes qui ressemblent à des "Beans", dont les attributs qui ont besoin d'être manipulés par l'XML ont les accesseurs associés.

    Ensuite, quand je lis param="X" dans mon XML, je fais une recherche et une invocation de la méthode setParam(String) avec le paramètre "X" sur la classe concernée.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/09/2007, 17h07
  2. problem avec la recherche d'une valeur dans les table
    Par anilane dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/05/2007, 19h35
  3. Réponses: 3
    Dernier message: 09/04/2006, 13h04
  4. Réponses: 3
    Dernier message: 18/03/2006, 19h51
  5. Réponses: 2
    Dernier message: 10/10/2005, 02h25

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