我正在尝试运行以下代码:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Reflection {
/**
* @param args
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static void main(String[] args) throws IllegalAccessException,
InvocationTargetException, IllegalArgumentException {
Class<Cls> cls = Cls.class;
Method[] methods = cls.getMethods();
for (Method m : methods) {
m.invoke(cls);
}
}
}
class Cls {
public static void method1() {
System.out.println("Method1");
}
public static void method2() {
System.out.println("Method2");
}
}
我不断收到IllegalArgumentException:错误的参数数量,即使这两个方法没有参数。
我尝试将null
传递给invoke
方法,但这会引发NPE。
答案 0 :(得分:7)
您实际上是正确调用方法,问题是Class.getMethods()方法返回类中的ALL方法,包括从超类继承的方法,例如本例中的Object。 documentation州:
返回一个包含Method对象的数组,这些对象反映此Class对象所表示的类或接口的所有公共成员方法,包括由类或接口声明的那些以及从超类和超接口继承的那些。
在这种情况下,您可能最终调用Object.equals而不使用任何参数。 Object.wait方法等也是如此。
答案 1 :(得分:0)