gpt4 book ai didi

java - 为什么我在调用invoke方法(JAVA)时遇到 "wrong number of arguments"异常

转载 作者:行者123 更新时间:2023-11-30 05:57:43 25 4
gpt4 key购买 nike

我试图在java中调用带有反射的方法,但是当我调用invoke方法时出现异常。这是我的代码:

public void start() {
try {
ServerSocket server = new ServerSocket(port);

while(true) {
Socket s = server.accept();

ObjectInputStream in = new ObjectInputStream(s.getInputStream());

Class<?> myClass = Class.forName(vmi.getClass().toString().split(" ")[1]);

ArrayList<Object> array = new ArrayList();

Constructor<?> cons = myClass.getConstructor(new Class<?>[] {});


String method = null;
for(Method m : myClass.getMethods()) {
method = in.readObject().toString();

if(m.getName().equals(method)) {

Type return_type = m.getGenericReturnType();

for(Type types: m.getGenericParameterTypes()) {
array.add(in.readObject());
}
System.out.println(return_type);
if (return_type.toString().equals("void")) {
m.invoke(vmi, (Object)array);
}
break;
}
}

}
} catch (IOException | ClassNotFoundException | NoSuchMethodException
| SecurityException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();

System.out.println("Skeleton Exception "+ e.toString());
}
}

这是异常(exception):

java.lang.IllegalArgumentException: wrong number of arguments

我还尝试使用空对象调用该方法,但异常仍然存在

m.invoke(vmi, new Object(), new Object());

顺便说一句,变量vmiport是在构造函数中初始化的。

最佳答案

Method.invoke方法的签名是:

public Object invoke(Object obj, Object... args)

这是语法糖(如果你没有传递可变参数):

public Object invoke(Object obj, Object[] args)

但是,您正在传递 (Object,Object) -> 这会将第二个对象作为可变参数的单个参数,因此编译器会将您的调用转换为 m .invoke(vmi, new Object[] { array }).

使代码变得复杂的是,您有一个名为 array 的变量,但它的类型实际上是 ArrayList,它不是数组。

您可以将代码更改为:

m.invoke(vmi, array.toArray());

这会将您的参数作为整个 varargs 参数 args 传递,而不是作为 varargs 数组中的单个元素传递。

关于java - 为什么我在调用invoke方法(JAVA)时遇到 "wrong number of arguments"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com