Java method.invoke上的参数数目错误

Java method.invoke上的参数数目错误,java,arrays,Java,Arrays,我目前有以下代码: public class Pants { public static void main(String[] args) { Pants pants = new Pants(); pants.eat(10, 10.3, "Nice."); Object[] params = {(long)10, 10.3, "Nice."}; Method eatMethod = pants.getClass().get

我目前有以下代码:

public class Pants {
    public static void main(String[] args) {
        Pants pants = new Pants();
        pants.eat(10, 10.3, "Nice.");

        Object[] params = {(long)10, 10.3, "Nice."};
        Method eatMethod = pants.getClass().getMethods()[0];
        try
        {
            eatMethod.invoke(pants, params);
        } catch (IllegalAccessException | InvocationTargetException e)
        {
            e.printStackTrace();
        }
    }

    public void eat(long amount, double size, String name) {
        System.out.println("You ate");
    }
}
它总是抛出

IllegalArgumentException: wrong number of arguments.
其他方法也是如此。我在
eat()
中使用了与
方法.invoke中相同的参数,并且类型相同。错误被抛出

eatMethod.invoke(pants, params);

正如评论所说。我们不知道哪个方法是
pants.getClass().getMethods()[0]
。尝试使用
eatMethod.getName()
获取名称,看看是否真的是eat方法。如果 不,你可以试试这个

 java.lang.reflect.Method method;
     method = pants.getClass().getMethod("eat", Long.class, Double.class, String.class);
    .
    .
    .
      method.invoke(pants,params );
还有。。。检查方法是否正确,这些方法从不排序

返回数组中的元素未排序,并且不在任何位置 特定顺序


所以有时候你的代码可以工作,有时候不行

正如评论所说。我们不知道哪个方法是
pants.getClass().getMethods()[0]
。尝试使用
eatMethod.getName()
获取名称,看看是否真的是eat方法。如果 不,你可以试试这个

 java.lang.reflect.Method method;
     method = pants.getClass().getMethod("eat", Long.class, Double.class, String.class);
    .
    .
    .
      method.invoke(pants,params );
还有。。。检查方法是否正确,这些方法从不排序

返回数组中的元素未排序,并且不在任何位置 特定顺序


所以有时候你的代码可以工作,有时候不行

事实证明,当我使用
getMethods()[0]
时,我得到了main方法并调用了它,它显然没有参数,因此无法工作。理想情况下,我应该使用

getMethod("eat", long.class, double.class, String.class)

它确实有效。

结果是,当我使用
getMethods()[0]
时,我得到了main方法并调用了它,它显然没有参数,所以不起作用。理想情况下,我应该使用

getMethod("eat", long.class, double.class, String.class)

这确实有效。

它没有为错误提供行号吗?
方法eatMethod=pants.getClass().getMethods()[0]
你确定
是第一条吗?请出示你的
裤子
课程。另外,获得这样的方法是一个坏主意-你永远不知道会得到哪一个。代码对我来说运行良好。getMethods()[0]返回main()方法,如果你试图访问eat()方法,你应该使用getMethods()[1]。最好还是使用getDeclaredMethod(methodname,params)来获取相同的数据,因为它不会为错误提供行号吗?
方法eatMethod=pants.getClass().getMethods()[0]
你确定
是第一条吗?请出示你的
裤子
课程。另外,获得这样的方法是一个坏主意-你永远不知道会得到哪一个。代码对我来说运行良好。getMethods()[0]返回main()方法,如果你试图访问eat()方法,你应该使用getMethods()[1]。最好还是使用getDeclaredMethod(methodname,params)来获得相同的结果