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 :

Problème avec Réflexivité


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 115
    Par défaut Problème avec Réflexivité
    Bonjour à tous!
    Je souhaiterais faire une classe qui permet de récupérer toutes le signature des méthodes de la classe passer en paramètres.
    Mais dès que je veux faire un Class.forName(maClasse) j'ai cette erreur:
    unreported exception java.lang.classnotfoundexception must be caught or declared to be thrown
    Voici la classe:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public class Signature 
    {
        public void Signature(String NameClasse)
        {
            Class c = Class.forName(NameClasse);
            Method[] constructors =c.getDeclaredMethods();//getDeclaredMethods();//.getConstructors();
     
              System.out.println("Il y a "+constructors.length + " methode dans la classe");
     
              int i =0;
              for( i =0; i< constructors.length; i++ )
              {
                  System.out.println( constructors[i].getName());
                //  Method main = TestReflection.class.getMethod(constructors[i],String[].class);
     
                    System.out.println("Signature : " +getJNISignature(constructors[i])); // retourne 'I'
     
     
                  System.out.println("-----------------------------------");
              }
        }
     
        public static String getJNISignature(Method m) {
            String retType = m.getReturnType().getName();
            StringBuilder params = new StringBuilder();
            for(Class<?> param :  m.getParameterTypes())
                params.append(getJNIType(param.getName()));
            return "(" + params.toString() + ")" + getJNIType(retType);
        }
     
        /**
         * Ajustement du type conformément à JNI
         * @param in Type d'entrée
         * @return type ajusté
         */
        public static String getJNIType(String in) {
            String ret = in;
            if(in.equals("void")) ret = "V";
            else if(in.equals("int")) ret = "I";
            else if(in.equals("long")) ret = "J";
            else if(in.equals("double")) ret = "D";
            else if(in.equals("float")) ret = "F";
            else if(in.equals("short")) ret = "S";
            else if(in.equals("byte")) ret = "B";
            else if(in.equals("boolean")) ret = "Z";
            else if(in.equals("char")) ret = "C";
            else if(in.indexOf(".") != -1) { // cas des objets
                ret = ret.replaceAll("\\.", "/"); // conforme JNI
                //idem si l'objet ne se termine pas par ';'
                if(!ret.endsWith(";")) ret += ";";
                if(ret.startsWith("[") && ret.charAt(1) != 'L') {
                    ret = "[L" + ret.substring(1, ret.length()); 
                } else if(!ret.startsWith("[") && ret.charAt(0) != 'L') {
                    ret = "L" + ret; 
                }
            }
            return ret;
        }   
     
     
    }
    Et l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String signature = "TestReflection"; 
    Signature Sign = new Signature();
    Sign.Signature(signature);
    Je vois pas pourquoi cela ne peut pas marcher ?!

    Merci

  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
    Bonjour,

    L'erreur dit que tu dois cactcher l'exception "ClassNotFoundException" si tu veux utiliser cette méthode, et le javadoc dit que tu doits encore catcher d'autres.

    A+.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 115
    Par défaut
    Merci , maintenant cela marche

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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