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:
Et l'appel:
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; } }
Je vois pas pourquoi cela ne peut pas marcher ?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String signature = "TestReflection"; Signature Sign = new Signature(); Sign.Signature(signature);
Merci![]()
Partager