web-dev-qa-db-fra.com

Invocation d'une méthode statique utilisant la réflexion

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.

178
Steven
// 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.

263
Adeel Ansari

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) 
43
atk
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;
    }
}
10
Frostman