这是我动态调用方法的代码:
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)
Run Code Online (Sandbox Code Playgroud)
parameters是一个字符串数组,这是我的level1ClassSimilarityForUser方法的声明
public ResultSet level1ClassSimilarityForUser(String[] userURI) {
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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)
Run Code Online (Sandbox Code Playgroud)
invoke期望Object[]作为第二个参数(varargs只是一种方便的语法).我认为在你的情况下,String[]它不是第一个vararg参数,但完整的vararg Object[]因此你的单个字符串被用作不匹配的参数String[].
在您的情况下,在提供Object之前将参数显式地包装在数组中invoke应该可行.
所以,做results = (ResultSet) method.invoke(new TestRecommendations(), new Ojbect[] { parameters })代替
| 归档时间: |
|
| 查看次数: |
10892 次 |
| 最近记录: |