Java IllegalArgumentException:参数数目错误

Java IllegalArgumentException:参数数目错误,java,reflection,Java,Reflection,我正在尝试运行以下代码: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Reflection { /** * @param args * @throws InvocationTargetException * @throws IllegalArgumentException * @throws I

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

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");
    }
}
import java.lang.reflect.InvocationTargetException;
导入java.lang.reflect.Method;
公共课反思{
/**
*@param args
*@targetException
*@galargumentException
*@galacessException
*/
公共静态void main(字符串[]args)引发IllegalAccessException,
InvocationTargetException,IllegalArgumentException{
类别cls=类别cls;
方法[]methods=cls.getMethods();
用于(方法m:方法){
m、 调用(cls);
}
}
}
Cls类{
公共静态无效方法1(){
System.out.println(“方法1”);
}
公共静态无效方法2(){
System.out.println(“方法2”);
}
}
我不断得到一个IllegalArgumentException:参数的数量错误,即使这两个方法没有参数

我尝试将
null
传递给
invoke
方法,但这会抛出一个NPE。

根据:

如果基础方法所需的形式参数数为0,则提供的args数组的长度可能为0或null

你试过这个吗

m.invoke(cls, null);

实际上,您正在正确调用这些方法,问题是Class.getMethods()方法返回类中的所有方法,包括从超类继承的方法,例如本例中的Object。各国:

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


例如,在这种情况下,您可能会在没有任何参数的情况下调用Object.equals。Object.wait方法等也是如此。

是,抛出相同的异常。