IllegalArgumentException:参数数量错误

Mah*_*sam 4 java reflection

我正在尝试运行以下代码:

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直得到一个IllegalArgumentException:错误的参数数量,即使这两个方法没有参数.

我尝试传递nullinvoke方法,但是抛出了一个NPE.

Jid*_*ddo 7

您实际上正在调用方法,问题是Class.getMethods()方法返回类中的ALL方法,包括从超类继承的方法,例如本例中的Object.该文件规定:

返回一个包含Method对象的数组,这些对象反映此Class对象所表示的类或接口的所有公共成员方法,包括由类或接口声明的那些以及从超类和超接口继承的那些.

在这种情况下,您可能最终调用Object.equals而不使用任何参数.Object.wait方法等也是如此.