method.invoke上的参数数量错误

时间:2018-06-20 15:27:26

标签: 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().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:错误的参数数量。其他方法也发生了这种情况。我在eat()中使用了与method.invoke中相同的参数,并且类型相同。错误引发

eatMethod.invoke(pants, params)

2 个答案:

答案 0 :(得分:2)

正如评论所说。我们不知道wich方法是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 );

编辑...检查Java Docs方法从未排序

  

返回数组中的元素未排序,也不在任何元素中   特定顺序。

因此,有时您的代码可能有效,有时则无效。

答案 1 :(得分:1)

原来,当我使用getMethods()[0]时,我正在获取main方法并调用该方法,该方法显然没有参数,因此无法正常工作。理想情况下,我应该使用

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

有效。