问题描述
这是我动态调用方法的代码:
This is my code to invoke a method dynamically:
String[] parameters = new String[requiredParameters.length];
//here i put some values in the parameters array
method = TestRecommendations.class.getMethod("level1ClassSimilarityForUser",
String[].class);
System.out.println(":" + parameters[0] + ":");
results = (ResultSet) method.invoke(new TestRecommendations(), parameters)
参数
是一个字符串数组,这是我的 level1ClassSimilarityForUser
方法的声明
parameters
is a string array, and this is the declaration of my level1ClassSimilarityForUser
method
public ResultSet level1ClassSimilarityForUser(String[] userURI) {
我收到此错误:
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
推荐答案
调用
期望 Object []
作为第二个参数(varargs只是一个便利语法)。
我认为在你的情况下, String []
不作为第一个vararg参数,而是完整的vararg Object []
因此您的单个字符串用作与 String []
不匹配的参数。
在您的情况下,显式包装您的参数在对象
数组中,在将它提供给 invoke
之前应该有效。
所以 results =(ResultSet)method.invoke(new TestRecommendations(),new Ojbect [] {parameters})
而不是
invoke
expects an Object[]
as second argument (varargs is just a convenience syntax).I think in your case the String[]
is not taken as the first vararg argument, but the complete vararg Object[]
and thus your single strings are used as arguments which does not match String[]
.
In your case, explicitly wrapping your parameters in an Object
array before giving it to invoke
should work.
So do results = (ResultSet) method.invoke(new TestRecommendations(), new Ojbect[] { parameters })
instead
这篇关于java.lang.IllegalArgumentException:字符串数组上的参数类型不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!