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 :

introspection et Long wrapper


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Par défaut introspection et Long wrapper
    Bonjour,

    j'ai un petit soucis avec l'introspection :

    mon test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MonObjet result  = null ; 
    		try {
    			result  = (DefaultParams) this.invokePrivateMethod("fillEntityBean", new Class[]{Long.class, Long.class, Long.class, Long.class,Long.class}, idTechnic, idProfil, idMotif,idGroupe,idSource );
    		} catch (InvocationTargetException e) {
    			e.printStackTrace();
    			fail();
    		}

    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
     
    private Object invokePrivateMethod(String methodName, Class[]paramType, Object ... param) throws InvocationTargetException{
     
    		Method method;
    		Object result = null ; 
    		try {
    			method = MonObjet.class.getDeclaredMethod(methodName, paramType);
    			method.setAccessible(true);
    			result = method.invoke(MonObjet.class, param);
    		} catch (SecurityException e) {
    			e.printStackTrace();
    			fail();
    		} catch (NoSuchMethodException e) {
    			e.printStackTrace();
    			fail();
    		} catch (IllegalArgumentException e) {
    			e.printStackTrace();
    			fail();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    			fail();
    		} catch (InvocationTargetException e) {
    			throw e ; 
    		}
     
    		return result; 
     
    	}
    la méthode testée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private MonObjet fillEntityBean(Long idProfil, Long idMotif,
    			Long idGroupe, Long source) {
     
    		DefaultParams entity = new DefaultParams();
     
    		entity.setProfilId(idProfil);
    		entity.setMotifId(idMotif);
    		entity.setGroupeId(idGroupe);
    		entity.setSource(source);
     
    		return entity;
     
    	}

    Et mon soucis est que je ramasse toujours : java.lang.IllegalArgumentException: object is not an instance of declaring class

    Je ne vois pas pourquoi, ma méthode prend des Long en entrée, je lui en donne mais ca ne semble pas lui plaire.

    Auriez vous des idées sur le sujet ?

    merci d'avance

    Sébastien

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Ton code à l'air bon mais, pour les valeurs, tu as bien donnée des valeurs type long (avec le suffixe "l" ou "L") ? Tu travailles avec une version de java >= 5 (Vérifie la version du compilateur utilisé par ton IDE).

    A+.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Le problème c'est pas les paramètres.

    Le problème c'est l'objet sur lequel appliquer la méthode. Dans ton invoke, tu mets MonObjet.class. Mais il faut pas mettre la classe, il faut mettre une instance de MonObjet. Celle sur laquelle tu veux appeler la méthode.

    Bon, et puis, ça ne marchera pas, puisque c'est une méthode privée. Une méthode privée ne peut être appelée que par la classe qui la déclare, introspection ou pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Bon, et puis, ça ne marchera pas, puisque c'est une méthode privée. Une méthode privée ne peut être appelée que par la classe qui la déclare, introspection ou pas.
    On peut y accéder. Sinon, je suis d'accord avec toi, c'est l'instance d'objet quand met en paramètre mais pas la class.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Par défaut
    Je suis en java 6. Donc de ce coté là pas de problème de boxing ou pas.

    Sisi il est tout à fait possible d’accéder à des éléments privées d'une classe

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Par défaut
    Mais bien vu en effet thelvin

    je ne dois pas lui passer MonObjet.class mais une instance

    merci de ton conseil

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    On peut y accéder.
    Ah, je n'avais pas vu le code qui le faisait.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. calcul melangeant int et long int ?
    Par ThR dans le forum C
    Réponses: 2
    Dernier message: 06/01/2003, 01h13
  2. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28
  3. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34
  4. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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