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