java.lang.IllegalArgumentException:字符串数组上的参数类型不匹配

这是我动态调用方法的代码:

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) 

parameters是一个字符串数组,这是我的level1ClassSimilarityForUser方法的声明

 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) 

invoke期望一个Object[]作为第二个参数(varargs只是一种方便的语法)。 我认为在你的情况下, String[]不被视为第一个vararg参数,但是完整的vararg Object[]因此你的单个字符串被用作与String[]不匹配的参数。
在您的情况下,在给予invoke之前将参数显式地包装在Object数组中应该有效。
所以results = (ResultSet) method.invoke(new TestRecommendations(), new Ojbect[] { parameters })代替