Je veux invoquer la méthode main
qui est statique. J'ai reçu l'objet de type Class
, mais je ne suis pas en mesure de créer une instance de cette classe ni d'appeler la méthode static
, main
.
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");
Si la méthode est privée, utilisez getDeclaredMethod()
au lieu de getMethod()
. Et appelez setAccessible(true)
sur l'objet de méthode.
Depuis la Javadoc de Method.invoke ():
Si la méthode sous-jacente est statique, l'argument obj spécifié est ignoré. Cela peut être nul.
Qu'est-ce qui se passe quand vous
Classe klass = ...; Méthode m = klass.getDeclaredMethod (methodName, paramtypes); M.invoke (null, args)
String methodName= "...";
String[] args = {};
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
// for static methods we can use null as instance of class
m.invoke(null, new Object[] {args});
break;
}
}