IllegalArgumentException:参数数目错误



我试图运行以下代码:

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。

您实际上正确地调用了方法,问题是class . getmethods()方法返回类中的所有方法,包括继承自超类的方法,例如本例中的Object。文档说明:

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

在这种情况下,您可能最终调用Object。例如,不带参数的等号。对象也是如此。等待方法等

根据文档:

如果底层方法所需的形式参数的个数为0,则提供的args数组的长度可以为0或null。

你试过这个吗?

m.invoke(cls, null);

相关内容

  • 没有找到相关文章

最新更新