使用reflection调用静态方法
我想调用静态的main
方法。 我得到了Class
types的对象,但我无法创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; } }