Java Method.invoke() 抛出 IllegalArgumentException:参数类型不匹配
Java Method.invoke() throwing IllegalArgumentException: argument type mismatch
我正在尝试使用 Object[]
参数类型调用 静态方法 。当我调试时,正确的方法被识别并且我输入的参数类型在我看来是正确的类型。
public String convertToJSFunction(Method method, Object[] params) {
String function = method.getName();
for (Method m : JavaToJS.class.getDeclaredMethods()) {
if (m.getName().equals(function))
try {
return (String) m.invoke(null,params);
} catch (IllegalAccessException e) {
e.printStackTrace();
return null;
} catch (InvocationTargetException e) {
e.printStackTrace();
return null;
} catch (IllegalArgumentException e) {
e.printStackTrace();
return null;
}
}
return null;
}
JavaToJS
只有 静态方法 。调试后,我尝试调用的m
是这个方法:
public static String setRegionNumber(Object[] params)
这 抛出 一个 IllegalArgumentException: argument type mismatch
。这怎么可能?
我猜你打电话给
Method setRegionNumber=...; // "setRegionNumber" Method
Object[] params=...; // your Object-Array Parameter
convertToJSFunction(setRegionNumber, params);
但是你需要做的是
Method setRegionNumber=...; // "setRegionNumber" Method
Object[] params=...; // your Object-Array Parameter
convertToJSFunction(setRegionNumber, new Object[] { params });
这是因为Method.invoke
期望被调用方法的参数列表是一个对象数组。因此,如果您直接传递对象数组,那么它会将其解释为参数列表。所以如果你有一个 Object[]
参数,你需要像任何其他参数一样将它包装在一个对象数组中。
我正在尝试使用 Object[]
参数类型调用 静态方法 。当我调试时,正确的方法被识别并且我输入的参数类型在我看来是正确的类型。
public String convertToJSFunction(Method method, Object[] params) {
String function = method.getName();
for (Method m : JavaToJS.class.getDeclaredMethods()) {
if (m.getName().equals(function))
try {
return (String) m.invoke(null,params);
} catch (IllegalAccessException e) {
e.printStackTrace();
return null;
} catch (InvocationTargetException e) {
e.printStackTrace();
return null;
} catch (IllegalArgumentException e) {
e.printStackTrace();
return null;
}
}
return null;
}
JavaToJS
只有 静态方法 。调试后,我尝试调用的m
是这个方法:
public static String setRegionNumber(Object[] params)
这 抛出 一个 IllegalArgumentException: argument type mismatch
。这怎么可能?
我猜你打电话给
Method setRegionNumber=...; // "setRegionNumber" Method
Object[] params=...; // your Object-Array Parameter
convertToJSFunction(setRegionNumber, params);
但是你需要做的是
Method setRegionNumber=...; // "setRegionNumber" Method
Object[] params=...; // your Object-Array Parameter
convertToJSFunction(setRegionNumber, new Object[] { params });
这是因为Method.invoke
期望被调用方法的参数列表是一个对象数组。因此,如果您直接传递对象数组,那么它会将其解释为参数列表。所以如果你有一个 Object[]
参数,你需要像任何其他参数一样将它包装在一个对象数组中。