使用reflection调用静态方法

我想调用静态的main方法。 我得到了Classtypes的对象,但我无法创build该类的实例,也无法调用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"); 

如果该方法是私人使用getDeclaredMethod()而不是getMethod() 。 并在方法对象上调用setAccessible(true)

从Method.invoke()的Javadoc:

如果底层方法是静态的,那么指定的obj参数将被忽略。 它可能是空的。

当你发生什么事情

类klass = ...;
方法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; } }