我目前有以下代码:
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)
答案 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)
有效。