Richiamo di un metodo statico mediante riflessione

Voglio invocare il metodo main che è statico. Ho ottenuto l’object di tipo Class , ma non sono in grado di creare un’istanza di quella class e non sono in grado di invocare il metodo 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"); 

Nel caso in cui il metodo sia privato, usa getDeclaredMethod() invece di getMethod() . E chiama setAccessible(true) sull’object metodo.

Dal Javadoc di Method.invoke ():

Se il metodo sottostante è statico, l’argomento obj specificato viene ignorato. Potrebbe essere nullo.

Cosa succede quando tu

 Classe klass = ...;
 Metodo 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; } }