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:
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:
1 2 3
| String signature = "TestReflection";
Signature Sign = new Signature();
Sign.Signature(signature); |
Je vois pas pourquoi cela ne peut pas marcher ?!
Merci ;)