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)来获得相同的结果